Bun Test
Use this skill for tests run by bun test.
Repo Facts
- Root test command:
bun run test->bun test. packages/theseus-toolshasbun test src/.packages/jsx-mdandpackages/jsx-md-beautiful-mermaiduse package-localbun test.- Tests live beside source or under
src/__tests__/.
Imports
import { describe, expect, test, beforeEach, afterEach, mock, spyOn } from "bun:test";
Use only the APIs needed by the test. Keep setup close to the tests unless it is reused across files.
Test Shape
- Test behavior through public exports where practical.
- Use narrow tests for boundary behavior: schema failures, typed failures, serialization, stream completion, and runtime lifecycle.
- For Effect code, run effects at the test boundary with
Effect.runPromise. - Assert typed failures by
_tagand fields, not by brittle stringified output. - For streams, assert both emitted values and completion behavior.
- For background fibers, assert interruption, shutdown, or result handoff.
Mocks And Spies
- Use
mockfor small injected functions. - Use
spyOnwhen observing object methods. - Restore mocks in
afterEachwhen they can leak state. - Prefer dependency injection or test layers over module mocking for Effect services.
Commands
- Whole repo:
bun run test. - Specific file:
bun test path/to/file.test.ts. - Package scope: run the package script if present.
- Name filter:
bun test -t "pattern". - Watch mode is for local iteration, not final verification.
Anti-Patterns
- Do not leave
test.onlyor focus filters in committed tests. - Do not use sleeps to paper over async lifecycle bugs.
- Do not assert implementation details when public behavior is available.
- Do not update snapshots unless the output change is intentional and reviewed.