ClaudeCloudflare Developer PlatformJul 27, 2026, 12:00 AM

Workers - Run integration tests against your Worker's production build

A condensed section focused on the key takeaways first.

Original Post

Quick Digest

Summary

A condensed section focused on the key takeaways first.

claudeen

Workers - Run integration tests against your Worker's production build Summary

Key Points

  • Point 1: July 27, 2026 Run integration tests against your Worker's production build Workers Wrangler now provides createTestHarness() , an API for running integration tests against Work
  • Point 2: The test harness starts a local Worker server with helpers for dispatching requests, resetting storage, and inspecting runtime logs .
  • Point 3: This is useful for tests that need to: Route requests across multiple Workers Mock outbound fetch() requests with Node.js request mocking libraries such as MSW ↗ Run Playwright tes

Summary

This is an English summary of "Workers - Run integration tests against your Worker's production build" published on 2026-07-27.

Key Points

  • Point 1: July 27, 2026 Run integration tests against your Worker's production build Workers Wrangler now provides createTestHarness() , an API for running integration tests against Work
  • Point 2: The test harness starts a local Worker server with helpers for dispatching requests, resetting storage, and inspecting runtime logs .
  • Point 3: This is useful for tests that need to: Route requests across multiple Workers Mock outbound fetch() requests with Node.js request mocking libraries such as MSW ↗ Run Playwright tes

Full Translation

Translations

A translation section that keeps the flow of the original article.

claudeja

Workers - Run integration tests against your Worker's production build(原文タイトル)

概要

公開日: 2026-07-27 翻訳生成に失敗したため、原文をそのまま保存しています。

原文

July 27, 2026 Run integration tests against your Worker's production build Workers Wrangler now provides createTestHarness() , an API for running integration tests against Workers built with Wrangler or the Cloudflare Vite plugin from any Node.js test runner. The test harness starts a local Worker server with helpers for dispatching requests, resetting storage, and inspecting runtime logs . This is useful for tests that need to: Route requests across multiple Workers Mock outbound fetch() requests with Node.js request mocking libraries such as MSW ↗ Run Playwright tests against a Worker For example, this test starts two Workers and mocks an upstream API: tests/vitest.test.js js import { afterAll, afterEach, beforeAll, test } from "vitest" ; import { http, HttpResponse } from "msw" ; import { setupServer } from "msw/node" ; import { createTestHarness } from "wrangler" ; const network = setupServer (); const server = createTestHarness ({ workers: [ /** Includes "routes": ["example.com/*"] / { configPath: "./workers/web/wrangler.jsonc" }, /* Includes "routes": ["api.example.com/v1/*"] / { configPath: "./workers/api/wrangler.jsonc" }, ], }); beforeAll ( async () => { network. listen ({ onUnhandledRequest: "error" }); await server. listen (); }); afterEach ( async () => { network. resetHandlers (); await server. reset (); }); afterAll ( async () => { network. close (); await server. close (); }); test ( "routes requests to each Worker" , async ({ expect }) => { // Mock the outbound fetch used to load user profiles. network. use ( http. get ( "http://identity.example.com/profile/123" , ({ params }) => { return HttpResponse. json ({ id: 123 , name: "Ada" }); }), ); const apiWorkerResponse = await server. fetch ( "http://api.example.com/v1/users/123" , ); expect ( await apiWorkerResponse. json ()). toEqual ({ id: 123 , name: "Ada" , }); const webWorkerResponse = await server. fetch ( "http://example.com/users/123" ); expect ( await webWorkerResponse. text ()). toBe ( "Profile: Ada" ); }); tests/vitest.test.ts ts import { afterAll, afterEach, beforeAll, test } from "vitest" ; import { http, HttpResponse } from "msw" ; import { setupServer } from "msw/node" ; import { createTestHarness } from "wrangler" ; const network = setupServer (); const server = createTestHarness ({ workers: [ /* Includes "routes": ["example.com/*"] / { configPath: "./workers/web/wrangler.jsonc" }, /* Includes "routes": ["api.example.com/v1/*"] */ { configPath: "./workers/api/wrangler.jsonc" }, ], }); beforeAll ( async () => { network. listen ({ onUnhandledRequest: "error" }); await server. listen (); }); afterEach ( async () => { network. resetHandlers (); await server. reset (); }); afterAll ( async () => { network. close (); await server. close (); }); test ( "routes requests to each Worker" , async ({ expect }) => { // Mock the outbound fetch used to load user profiles. network. use ( http. get ( "http://identity.example.com/profile/123" , ({ params }) => { return HttpResponse. json ({ id: 123 , name: "Ada" }); }), ); const apiWorkerResponse = await server. fetch ( "http://api.example.com/v1/users/123" , ); expect ( await apiWorkerResponse. json ()). toEqual ({ id: 123 , name: "Ada" , }); const webWorkerResponse = await server. fetch ( "http://example.com/users/123" ); expect ( await webWorkerResponse. text ()). toBe ( "Profile: Ada" ); }); Cloudflare now recommends createTestHarness() for integration tests instead of unstable_startWorker() or unstable_dev() . To start a development server programmatically, use the Vite createServer() ↗ API with the Cloudflare Vite plugin . For more information about createTestHarness() , refer to the Integration test harness guide .