unstable_dev API は、統合テストの実行方法として推奨されてきました。@cloudflare/vitest-plugin パッケージは 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 で動くため、グローバルモックも適用されます。
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-plugin";
import { defineConfig } from "vitest/config";
export default defineConfig({
plugins: [
cloudflareTest({
wrangler: {
configPath: "wrangler.jsonc",
},
}),
],
});unstable_dev API と異なり、Workers Vitest 連携は Service Worker 形式の Workers のテストをサポートしません。Workers Vitest 連携を使うには、先に ES modules 形式へ移行 してください。
コードから UnstableDevWorker のインポートを削除できます。代わりに、最初のテストを書く に沿って、すべてのテストの型を定義します。
- import { unstable_dev } from "wrangler";
- import type { UnstableDevWorker } from "wrangler";
+ import worker from "src/index.ts";
describe("Worker", () => {
- let worker: UnstableDevWorker;
...
});- 最初のテストを書く - Workers に対する単体テストを書きます。