mirror of
https://github.com/hanzoai/vitest.git
synced 2026-09-24 17:04:25 +00:00
41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
import { expect, test, vi } from "vitest";
|
|
import { server } from 'vitest/browser'
|
|
|
|
vi.mock("./src/actions", () => ({
|
|
plus: vi.fn().mockReturnValue(12345),
|
|
}));
|
|
|
|
|
|
test.runIf(server.config.name === 'chromium')("Service worker does not break vi.mock", async (t) => {
|
|
const registration = await navigator.serviceWorker.register(
|
|
new URL("./service-worker.js", import.meta.url)
|
|
);
|
|
t.onTestFinished(async () => {
|
|
await registration.unregister()
|
|
})
|
|
|
|
await vi.waitFor(() => expect(registration.active?.state).toBe("activated"));
|
|
await navigator.serviceWorker.ready;
|
|
let swResponseMessage = null;
|
|
const messageChannel = new MessageChannel();
|
|
messageChannel.port1.onmessage = (event) => {
|
|
swResponseMessage = event.data;
|
|
};
|
|
registration.active.postMessage({ type: "PING" }, [messageChannel.port2]);
|
|
await vi.waitFor(() => expect(swResponseMessage.type).toBe("PONG"));
|
|
|
|
// Send a mocked API request to the service worker
|
|
const response = await fetch("/hello");
|
|
// Assert the service worker intercepted the request
|
|
const responseText = await response.text();
|
|
expect(response.status).toBe(200);
|
|
expect(responseText).toBe("Hello from Service Worker!");
|
|
|
|
// Send an import, which will be intercepted by the service worker
|
|
// Verify vi.mock is still functional after mocking the network with a service worker
|
|
const { plus } = await import("./src/actions");
|
|
const result = plus(1, 2);
|
|
expect(plus).toHaveBeenCalled();
|
|
expect(result).toBe(12345);
|
|
});
|