Migrate Vitest store tests from vi.mock to MSW request handlers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-22 07:48:53 +08:00
parent 7e052f0d36
commit 3918755b7c
8 changed files with 554 additions and 348 deletions

View File

@@ -5,16 +5,14 @@
import { describe, it, expect, beforeEach, vi } from "vitest";
import { setActivePinia, createPinia } from "pinia";
import { http, HttpResponse } from "msw";
import { server } from "@/mocks/node.js";
import { findRequest, captureRequest } from "@/mocks/request-log.js";
vi.mock("@/module/apiError.js", () => ({
default: vi.fn(),
}));
const { mockGet } = vi.hoisted(() => ({ mockGet: vi.fn() }));
vi.mock("@/api/client.js", () => ({
default: { get: mockGet },
}));
import { usePerformanceStore } from "@/stores/performance";
describe("performanceStore", () => {
@@ -23,7 +21,7 @@ describe("performanceStore", () => {
beforeEach(() => {
setActivePinia(createPinia());
store = usePerformanceStore();
vi.clearAllMocks();
document.cookie = "luciaToken=fake-test-token";
});
it("has correct default state", () => {
@@ -39,24 +37,40 @@ describe("performanceStore", () => {
describe("getPerformance", () => {
it("fetches log performance data", async () => {
const mockData = { time: { charts: [] }, freq: { charts: [] } };
mockGet.mockResolvedValue({ data: mockData });
server.use(
http.get("/api/logs/:id/performance", ({ request }) => {
captureRequest("GET", new URL(request.url).pathname);
return HttpResponse.json(mockData);
}),
);
await store.getPerformance("log", 1);
expect(mockGet).toHaveBeenCalledWith("/api/logs/1/performance");
const reqs = findRequest("GET", "/api/logs/1/performance");
expect(reqs).toHaveLength(1);
expect(store.allPerformanceData).toEqual(mockData);
});
it("fetches filter performance data", async () => {
mockGet.mockResolvedValue({ data: { time: {} } });
server.use(
http.get("/api/filters/:id/performance", ({ request }) => {
captureRequest("GET", new URL(request.url).pathname);
return HttpResponse.json({ time: {} });
}),
);
await store.getPerformance("filter", 5);
expect(mockGet).toHaveBeenCalledWith("/api/filters/5/performance");
const reqs = findRequest("GET", "/api/filters/5/performance");
expect(reqs).toHaveLength(1);
});
it("does not throw on API failure", async () => {
mockGet.mockRejectedValue(new Error("Network error"));
server.use(
http.get("/api/logs/:id/performance", () =>
new HttpResponse(null, { status: 500 }),
),
);
// Should not throw - apiError handles it
await expect(store.getPerformance("log", 1)).resolves.not.toThrow();