← Cloudflare Workers / workers / testing / vitest-integration
Mockování odchozích požadavků
Použijte @msw/cloudflare ↗ k mockování odchozích HTTP a WebSocket požadavků pomocí @cloudflare/vitest-plugin. Integrace podporuje jednotkové testy, které volají exportovaný handler vašeho Workeru, i integrační testy, které volají exports.default.fetch().
Nainstalujte závislosti
Nainstalujte Mock Service Worker (MSW) verze 2.14 nebo novější a integraci Cloudflare:
npm i -D msw@^2.14.0 @msw/cloudflareVytvořte mock sítě
Vytvořte sdílený mock sítě pro své testy:
import { setupNetwork } from "@msw/cloudflare";
export const network = setupNetwork();import { setupNetwork } from "@msw/cloudflare";
export const network = setupNetwork();V nastavovacím souboru Vitest spusťte mock před testy, po každém testu resetujte handlery a po dokončení testů jej zastavte:
import { afterAll, afterEach, beforeAll } from "vitest";
import { network } from "./network";
beforeAll(() => network.enable());
afterEach(() => network.resetHandlers());
afterAll(() => network.disable());import { afterAll, afterEach, beforeAll } from "vitest";
import { network } from "./network";
beforeAll(() => network.enable());
afterEach(() => network.resetHandlers());
afterAll(() => network.disable());Přidejte soubor nastavení do setupFiles pole ve vaší konfiguraci Vitest.
Mockování HTTP požadavku
Použijte network.use() a handlery požadavků MSW pro vrácení odpovědi na odchozí požadavek. Tento příklad testuje Worker, který si vyžádá pozdrav od externího API:
export default {
async fetch() {
return fetch("https://api.example.com/greeting");
},
};export default {
async fetch(): Promise<Response> {
return fetch("https://api.example.com/greeting");
},
} satisfies ExportedHandler;import {
createExecutionContext,
waitOnExecutionContext,
} from "cloudflare:test";
import { env } from "cloudflare:workers";
import { http, HttpResponse } from "msw";
import { expect, it } from "vitest";
import worker from "../src";
import { network } from "./network";
it("mocks an outbound request", async () => {
network.use(
http.get("https://api.example.com/greeting", () => {
return HttpResponse.json({ message: "Hello" });
}),
);
const ctx = createExecutionContext();
const response = await worker.fetch(
new Request("https://example.com"),
env,
ctx,
);
await waitOnExecutionContext(ctx);
expect(await response.json()).toEqual({ message: "Hello" });
});import { createExecutionContext, waitOnExecutionContext } from "cloudflare:test";
import { env } from "cloudflare:workers";
import { http, HttpResponse } from "msw";
import { expect, it } from "vitest";
import worker from "../src";
import { network } from "./network";
it("mocks an outbound request", async () => {
network.use(
http.get("https://api.example.com/greeting", () => {
return HttpResponse.json({ message: "Hello" });
}),
);
const ctx = createExecutionContext();
const response = await worker.fetch(
new Request("https://example.com"),
env,
ctx,
);
await waitOnExecutionContext(ctx);
expect(await response.json()).toEqual({ message: "Hello" });
});Mockování odchozího WebSocketu
Použijte MSW ws.link() API k mockování WebSocket připojení vytvořeného vaším Workerem. fixture pro mockování požadavků ↗ zahrnuje HTTP, exports.default.fetch(), a příklady WebSocket.