import { fireEvent, render, screen } from "@testing-library/vue"; import { beforeEach, describe, expect, it, vi } from "vitest"; import App from "@/App.vue"; const invoke = vi.fn(); const open = vi.fn(); vi.mock("axios", () => { const get = vi.fn(async (url: string) => { if (url.includes("categories.json")) { return { data: {} }; } if (url.includes("homelinks.json") || url.includes("homelist.json")) { return { data: [] }; } if (url.includes("applist.json")) { return { data: [] }; } return { data: [] }; }); return { default: { create: () => ({ get }), }, }; }); vi.mock("@/modules/updateCenter", () => ({ createUpdateCenterStore: () => ({ isOpen: { value: false }, showCloseConfirm: { value: false }, showMigrationConfirm: { value: false }, searchQuery: { value: "" }, selectedTaskKeys: { value: new Set() }, snapshot: { value: { items: [], tasks: [], warnings: [], hasRunningTasks: false }, }, filteredItems: { value: [] }, allSelected: { value: false }, someSelected: { value: false }, bind: vi.fn(), unbind: vi.fn(), open, refresh: vi.fn(), ignoreItem: vi.fn(), unignoreItem: vi.fn(), toggleSelection: vi.fn(), toggleSelectAll: vi.fn(), getSelectedItems: vi.fn(() => []), closeNow: vi.fn(), startSelected: vi.fn(), requestClose: vi.fn(), }), })); describe("App update center entry", () => { beforeEach(() => { invoke.mockReset(); open.mockReset(); invoke.mockImplementation(async (channel: string) => { if (channel === "get-store-filter") return "both"; if (channel === "check-spark-available") return true; if (channel === "check-apm-available") return true; if (channel === "get-app-version") return "5.0.0"; return []; }); Object.assign(window.ipcRenderer, { invoke, on: vi.fn(), off: vi.fn(), send: vi.fn(), }); window.apm_store.arch = "amd64"; vi.stubGlobal( "matchMedia", vi.fn(() => ({ matches: false, addEventListener: vi.fn(), removeEventListener: vi.fn(), })), ); }); it("opens update center when clicking the sidebar action", async () => { render(App); await fireEvent.click(await screen.findByText("软件更新")); expect(open).toHaveBeenCalledWith("both"); }); });