import { render, screen, waitFor } from "@testing-library/react"; import { beforeEach, describe, expect, it, vi } from "vitest"; const { editor, monacoModuleLoaded } = vi.hoisted(() => ({ editor: { provider: "codemirror" }, monacoModuleLoaded: vi.fn(), })); vi.mock("@/hooks/use-editor-resolver", () => ({ useEditorProvider: () => editor.provider, })); vi.mock("@/components/editors/monaco/monaco-code-block", () => { monacoModuleLoaded(); return { MonacoCodeBlock: () =>
}; }); vi.mock("@/components/editors/codemirror/codemirror-code-block", () => ({ CodeMirrorCodeBlock: () =>
, })); vi.mock("@/components/editors/shiki/shiki-code-block", () => ({ ShikiCodeBlock: () =>
, })); describe("CodeBlock editor loading", () => { beforeEach(() => { editor.provider = "codemirror"; monacoModuleLoaded.mockClear(); vi.resetModules(); }); it("keeps Monaco off the import graph until the configured provider needs it", async () => { const { CodeBlock } = await import("./code-block"); render(const value = 1;); expect(screen.getByTestId("codemirror-code-block")).toBeTruthy(); expect(monacoModuleLoaded).not.toHaveBeenCalled(); }); it("loads Monaco on demand", async () => { editor.provider = "monaco"; const { CodeBlock } = await import("./code-block"); render(const value = 1;); await waitFor(() => expect(screen.getByTestId("monaco-code-block")).toBeTruthy()); }); });