569 字
3 分鐘

Cloudflare Workers integration test 怎麼寫?用 createTestHarness 測 production build

Cloudflare Workers 的 unit test 通過,不代表多個 Worker、route 和外部 API 組在一起仍能正常工作。Cloudflare 在 2026 年 7 月新增 createTestHarness(),讓你從一般 Node.js test runner 啟動以 Wrangler 或 Cloudflare Vite plugin 建置的 Worker,做接近 production build 的整合測試。

直接分工是:單一函式和 binding 狀態用 Workers Vitest integration;跨 Worker、HTTP route 與外部 fetch() 用 test harness。

最小 Vitest 範例#

先確認 wrangler 是開發相依套件,且專案有 wrangler.jsonc 或對應設定檔。

Terminal window
pnpm add -D wrangler vitest
import { afterAll, beforeAll, expect, test } from 'vitest'
import { createTestHarness } from 'wrangler'
const server = createTestHarness({
workers: [{ configPath: './wrangler.jsonc' }],
})
beforeAll(() => server.listen())
afterAll(() => server.close())
test('health endpoint returns 200', async () => {
const response = await server.fetch('/health')
expect(response.status).toBe(200)
})

範例的關鍵不是只呼叫 handler,而是由 harness 載入 Worker 專案設定並送出 request。若用 Cloudflare Vite plugin 建置,官方文件要求先執行 vite build,讓測試使用產出的 production build。

多個 Worker 時測 route,而非手動 mock 呼叫#

將每個 Worker 加進 workers,並在各自設定檔宣告 route。絕對 URL 會依 route 對應到目標 Worker;相對 URL 則送到第一個(primary)Worker。

const server = createTestHarness({
workers: [
{ configPath: './workers/web/wrangler.jsonc' },
{ configPath: './workers/api/wrangler.jsonc' },
],
})
const response = await server.fetch('http://api.example.com/v1/users/42')

這類測試特別適合驗證 route 寫錯、service 之間的 header 傳遞,或 production build 才出現的 module/binding 差異。

外部 fetch 要明確 mock#

Harness 不該讓測試意外呼叫真的第三方 API。Cloudflare 的整合範例使用 MSW:在測試前開始 mock server、對未處理 request 設為 error,並在每次測試後 reset handler。

import { afterEach, beforeAll } from 'vitest'
import { setupServer } from 'msw/node'
const network = setupServer()
beforeAll(() => network.listen({ onUnhandledRequest: 'error' }))
afterEach(() => network.resetHandlers())

若測試須覆寫 vars 或 secrets,請只放無敏感值的測試資料,並在斷言中驗證預期行為,而不是把 production credential 帶進本機或 CI。

加入前的檢查#

  1. 先保留快速 unit tests;不是每次變更都要啟動整合環境。
  2. 選一條最容易跨邊界失敗的路徑,例如 web → API → mocked upstream。
  3. 在 CI 固定執行 build 後的 integration test,讓測試目標與部署輸入一致。
  4. 把外部 request 設為未 mock 即失敗,避免測試不穩定或意外產生費用。

參考資料:

Cloudflare Changelog:Workers production build integration test harness

Cloudflare Workers Docs:Get started with the integration test harness

Cloudflare Workers Docs:Testing overview

Cloudflare Workers integration test 怎麼寫?用 createTestHarness 測 production build
https://laplusda.com/posts/cloudflare-workers-integration-test-harness/
作者
Zero
發佈於
2026-07-30
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。