wd-test-format

โดย cloudflare

คู่มือโดยละเอียดสำหรับการเขียนไฟล์ .wd-test ใน workerd พร้อมตัวอย่างการผูกข้อมูล, Durable Objects, การกำหนดค่าหลายบริการ, การทดสอบ TypeScript และการเข้าถึงเครือข่าย

npx skills add https://github.com/cloudflare/workerd --skill wd-test-format

.wd-test File Format

.wd-test files are Cap'n Proto configs that define test workers for workerd's test framework. They use the schema defined in src/workerd/server/workerd.capnp.


MANDATORY: Load Reference File When Relevant

This skill is split across multiple files for context efficiency. The core patterns below cover standard single-service tests. Advanced configuration patterns live in a reference file.

You MUST read the reference file before writing or reviewing test configs that involve its subject matter. Do not guess at advanced config syntax — the reference file contains the exact patterns and fields required. Skipping it WILL lead to incorrect configs that fail at runtime.

FileMUST load when...
Advanced configurationsTest involves Durable Objects, multiple services
communicating via service bindings, outbound network access,
external services/sockets, or TypeScript source files

When in doubt about whether the reference file is relevant, load it — the cost of reading is far less than the cost of a broken test config.


Basic Structure

using Workerd = import "/workerd/workerd.capnp";

const unitTests :Workerd.Config = (
  services = [(
    name = "my-test",
    worker = (
      modules = [(name = "worker", esModule = embed "my-test.js")],
      compatibilityFlags = ["nodejs_compat_v2"],
    ),
  )],
);

Key rules:

  • The const name (e.g., unitTests) must match what the test runner expects
  • modules uses embed to inline file contents at build time
  • The first module should be named "worker" — this is the entry point
  • compatibilityFlags control which APIs are available. Use the compat-date-at tool to look up available flags and their enable dates.
  • compatibilityDate should not be used in wd-test; use specific flags instead

Module Types

modules = [
  (name = "worker", esModule = embed "my-test.js"),           # ES module (most common)
  (name = "helper", esModule = embed "helper.js"),            # Additional ES module
  (name = "data.json", json = embed "test-data.json"),        # JSON module
  (name = "data.wasm", wasm = embed "module.wasm"),           # WebAssembly module
  (name = "legacy", commonJsModule = embed "legacy.js"),      # CommonJS module
],

Bindings

Bindings make services, data, and namespaces available to the worker via env:

bindings = [
  # Text binding — env.MY_TEXT is a string
  (name = "MY_TEXT", text = "hello world"),

  # Text from file
  (name = "CERT", text = embed "fixtures/cert.pem"),

  # Data binding — env.MY_DATA is an ArrayBuffer
  (name = "MY_DATA", data = "base64encodeddata"),

  # JSON binding — env.CONFIG is a parsed object
  (name = "CONFIG", json = "{ \"key\": \"value\" }"),

  # Service binding — env.OTHER_SERVICE is a fetch-able service
  (name = "OTHER_SERVICE", service = "other-service-name"),

  # Service binding with entrypoint
  (name = "MY_RPC", service = (name = "my-service", entrypoint = "MyClass")),

  # KV namespace — env.KV is a KV namespace
  (name = "KV", kvNamespace = "kv-namespace-id"),

  # Durable Object namespace — env.MY_DO is a DO namespace
  (name = "MY_DO", durableObjectNamespace = "MyDurableObject"),
],

Test JavaScript Structure

Test files export named objects with a test() method:

// Each export becomes a separate test case
export const basicTest = {
  test() {
    // Synchronous test
    assert.strictEqual(1 + 1, 2);
  },
};

export const asyncTest = {
  async test(ctrl, env) {
    // ctrl is the test controller
    // env contains bindings from the .wd-test config
    const resp = await env.OTHER_SERVICE.fetch('http://example.com/');
    assert.strictEqual(resp.status, 200);
  },
};

BUILD.bazel Integration

wd_test(
    src = "my-test.wd-test",
    args = ["--experimental"],      # Required for experimental features
    data = ["my-test.js"],          # Test JS/TS files
)

Additional data entries for fixture files:

wd_test(
    src = "crypto-test.wd-test",
    args = ["--experimental"],
    data = [
        "crypto-test.js",
        "fixtures/cert.pem",
        "fixtures/key.pem",
    ],
)

Test Variants

Every wd_test() automatically generates three variants:

Target suffixCompat dateDescription
@2000-01-01Default, tests with oldest compat date
@all-compat-flags2999-12-31Tests with all flags enabled
@all-autogates2000-01-01Tests with all autogates enabled

Run specific variants:

just stream-test //src/workerd/api/tests:my-test@
just stream-test //src/workerd/api/tests:my-test@all-compat-flags

Scaffolding

Use just new-test to scaffold a new test:

just new-test //src/workerd/api/tests:my-test

This creates the .wd-test file, .js test file, and appends the wd_test() rule to BUILD.bazel.

Skills เพิ่มเติมจาก cloudflare

dependabot-review
cloudflare
วิเคราะห์ Pull Request ของ Dependabot เพื่อตรวจสอบว่ามีการเปลี่ยนแปลงอะไรเกิดขึ้นจริงในแต่ละแพ็กเกจที่ถูกอัปเดต และการเปลี่ยนแปลงเหล่านั้นส่งผลกระทบต่อ repo นี้หรือไม่ รายงาน API/เมธอดที่เปลี่ยนแปลง…
module-registry
cloudflare
โหลดเมื่อทำงานกับ module registry ใน workerd — การอ่าน, แก้ไข, ดีบัก, หรือตรวจสอบการแก้ไขโมดูล, การคอมไพล์, การประเมินผล, หรือการลงทะเบียน…
reproduce
cloudflare
ทำซ้ำปัญหา GitHub ของ cloudflare/agents โดยการสร้างโปรเจกต์ Agents/Worker ขั้นต่ำและปรับใช้กับบัญชี Cloudflare ชั่วคราว จากนั้นรายงาน…
local-explorer
cloudflare
วิธีการเพิ่มผลิตภัณฑ์/ทรัพยากรไปยัง local explorer หรือ local API ใช้เมื่อกำลังใช้งาน local API ใหม่ หรือเส้นทาง UI ภายใต้…
open-pr
cloudflare
นำ issue จาก GitHub ของ cloudflare/agents และผลการจำลองซ้ำข้อบกพร่อง มาสร้าง PR แก้ไขในครั้งเดียว — สร้าง branch, แก้ไข, ทดสอบ, push, และเปิด PR ที่เชื่อมโยงกับ issue
write-endpoints
cloudflare
คู่มือฉบับสมบูรณ์สำหรับการสร้าง OpenAPI endpoints ด้วย chanfana - การกำหนด schema, การตรวจสอบคำขอ, การดำเนินการ CRUD, การรวมฐานข้อมูล D1 และ…
agents-sdk
cloudflare
สร้าง AI agent บน Cloudflare Workers โดยใช้ Agents SDK โหลดเมื่อสร้าง stateful agent, durable workflow, แอป WebSocket แบบเรียลไทม์, งานตามกำหนดเวลา,…
changelog
cloudflare
สร้าง อัปเดต และตรวจสอบรายการบันทึกการเปลี่ยนแปลงผลิตภัณฑ์สำหรับเว็บไซต์เอกสารของ Cloudflare โหลดเมื่อสร้างไฟล์ MDX บันทึกการเปลี่ยนแปลง แก้ไขไฟล์ที่มีอยู่…