unstable_dev API 一直是运行集成测试的推荐方式。@cloudflare/vitest-pool-workers 包直接与 Vitest 集成以实现快速重新运行,同时支持单元测试和集成测试,并提供按测试隔离的存储。
本指南演示使用 unstable_dev API 和 Workers Vitest 集成编写测试之间的主要差异。有关使用 Workers Vitest 集成编写测试的更多信息,请参阅编写你的第一个测试。
使用 unstable_dev 时,要触发 fetch 事件,你需要这样做:
import { unstable_dev } from "wrangler"
it("dispatches fetch event", () => {
const worker = await unstable_dev("src/index.ts");
const resp = await worker.fetch("http://example.com");
...
})使用 Workers Vitest 集成,你可以使用 cloudflare:workers 中的 exports 实现相同目标。exports.default 指向 Wrangler 配置文件中 main 选项定义的默认导出。此 main Worker 在与测试相同的 isolate 中运行,因此任何全局 mock 也会应用于它。
import { exports } from "cloudflare:workers";
import "../src/"; // Currently required to automatically rerun tests when `main` changes
it("dispatches fetch event", async () => {
const response = await exports.default.fetch("http://example.com");
...
});使用 Workers Vitest 集成时,无需通过 worker.stop() 停止 Worker。此功能在测试运行后自动处理。
通过 unstable_dev API,你可以将其作为选项引用 Wrangler 配置文件:
await unstable_dev("src/index.ts", {
config: "wrangler.toml",
});使用 Workers Vitest 集成,你现在可以在 vitest.config.js 中为所有测试设置对 Wrangler 配置文件的引用:
import { cloudflareTest } from "@cloudflare/vitest-pool-workers";
import { defineConfig } from "vitest/config";
export default defineConfig({
plugins: [
cloudflareTest({
wrangler: {
configPath: "wrangler.jsonc",
},
}),
],
});与 unstable_dev API 不同,Workers Vitest 集成不支持测试使用 service worker 格式的 Worker。你需要先迁移到 ES modules 格式才能使用 Workers Vitest 集成。
你可以从代码中移除 UnstableDevWorker 导入。请改为遵循编写你的第一个测试指南为所有测试定义类型。
- import { unstable_dev } from "wrangler";
- import type { UnstableDevWorker } from "wrangler";
+ import worker from "src/index.ts";
describe("Worker", () => {
- let worker: UnstableDevWorker;
...
});- 编写你的第一个测试 - 针对 Workers 编写单元测试。