Files

@workflow/vitest-workbench

This workbench demonstrates how to test workflows with Vitest using the @workflow/vitest plugin.

How it works

  1. Vitest plugin: The workflow() plugin from @workflow/vitest handles SWC transforms, bundle building, and in-process handler registration automatically.
  2. No server required: Workflows execute entirely in-process using a Local World instance, so they don't need an HTTP server.
  3. Tests: Use start(workflow, args) and await run.returnValue, plus helpers like waitForSleep() and waitForHook().

Usage

pnpm test

Project structure

workbench/vitest/
├── workflows/
│   ├── simple.ts          # Basic workflow with arithmetic steps
│   ├── sleeping.ts        # Workflows with sleep() calls
│   ├── hooks.ts           # Workflow with createHook() for external data
│   └── webhook.ts         # Workflow with createWebhook() for HTTP payloads
├── test/
│   └── workflow.test.ts   # Integration tests for all workflow types
├── vitest.config.ts       # Vitest config with workflow() plugin
├── MOCKING.md             # Analysis of mocking limitations
└── package.json

Test coverage

  • Basic workflow: Start and await return value
  • Sleep workflow: waitForSleep()wakeUp() to skip sleep
  • Multi-sleep workflow: Targeted wakeUp() with correlation IDs
  • Hook workflow: waitForHook()resumeHook() with approval/rejection
  • Webhook workflow: waitForHook()resumeWebhook() with Request payload