70bf21e064
Deploy (to testing) and Test Playground Preview Worker / Deploy Playground Preview Worker (testing) (push) Has been skipped
Deploy Workers Shared Staging / Deploy Workers Shared Staging (push) Failing after 0s
Prerelease / build (push) Has been skipped
Handle Changesets / Handle Changesets (push) Has been cancelled
Semgrep OSS scan / semgrep-oss (push) Has been cancelled
2.0 KiB
2.0 KiB
vitest-pool-workers — Agent Guide
Custom Vitest pool for running Worker tests inside the actual workerd runtime. Do NOT repeat root AGENTS.md content (pnpm, changesets, code style, etc.).
THREE-CONTEXT ARCHITECTURE
1. Pool (src/pool/index.ts)
- Runs in Node.js Vitest process
- Main export (
exports["."]), built as ESM (.mjs) - Orchestrates test execution
2. Config (src/config/index.ts)
- Runs in Node.js
- Exported as
exports["./config"], built as CJS (.cjs) - Provides
defineWorkersConfig()/defineWorkersProject()helpers - Injects Vite plugin for
cloudflare:testresolution, sets resolve conditions (workerd,worker,browser)
3. Worker (src/worker/index.ts)
- Runs inside workerd runtime
- NOT exported via package.json — internal entry
- Contains HACK: monkeypatches VitestExecutor to access singleton
- Has direct cross-package source import into
miniflare/src/workers/core/devalue
BUILD
scripts/bundle.mjs runs 3 separate esbuild builds:
undicimock-agent (CJS)- pool + worker (ESM)
- config + libs (CJS)
Types entry types/cloudflare-test.d.ts is hand-written (NOT generated from source).
THE cloudflare:test MODULE
Tests inside workerd import from cloudflare:test:
import { env, fetchMock, SELF } from "cloudflare:test";
Resolved by custom Vite plugin (@cloudflare/vitest-pool-workers:config) that re-exports from cloudflare:test-internal (runtime-provided).
CONVENTIONS
expectmust come from test context:it("name", ({ expect }) => {})— neverimport { expect } from "vitest"- Tests use
.test.tsnaming - Excludes
*.worker.test.tsfrom vitest config
TESTING
- Does NOT extend
vitest.shared.ts - Hook timeout: 60s, retry: 2
- Global setup starts mock npm registry, installs local package to temp dir
- Test helper: custom
testfixture withtmpPath,seed(),vitestRun(),vitestDev() - Fixtures in
fixtures/vitest-pool-workers-examples/(20+ sub-fixtures testing KV, R2, D1, DO, Queues, etc.) - Skipped on Windows CI due to flakiness