import { beforeEach, describe, expect, it, vi } from "vitest"; import { createApp } from "vue"; import App from "~/App.vue"; import vuetify from "~/plugins/vuetify"; import router from "~/router"; vi.mock("vue", async () => { const actual = await vi.importActual("vue"); return { ...actual, createApp: vi.fn(), }; }); vi.mock("./assets/main.css", () => ({})); vi.mock("./plugins/vuetify", () => ({ default: { install: vi.fn(), }, })); vi.mock("./router", () => ({ default: { install: vi.fn(), }, })); describe("main.ts", () => { beforeEach(() => { document.body.innerHTML = '
'; vi.mocked(createApp).mockImplementation( () => ({ use: vi.fn(), mount: vi.fn(), }) as any ); }); it("creates app and uses plugins", async () => { await import("~/main"); expect(createApp).toHaveBeenCalledTimes(1); expect(createApp).toHaveBeenCalledWith(App); const appMock = vi.mocked(createApp).mock.results[0]?.value; expect(appMock.use).toHaveBeenCalledTimes(2); expect(appMock.use).toHaveBeenCalledWith(vuetify); expect(appMock.use).toHaveBeenCalledWith(router); expect(appMock.mount).toHaveBeenCalledTimes(1); expect(appMock.mount).toHaveBeenCalledWith("#app"); }); });