Ts testing
Skill fusengine/agents/plugins/typescript-expert/skills/ts-testing
Redefining development through cognitive automation and collaborative agent systems.
npx -y skills add fusengine/agents --skill ts-testingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 22 stars22 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when writing or configuring TypeScript tests and choosing between bun test and Vitest. Covers runner selection, config, mocks, snapshots, and coverage. Do NOT use for framework-specific testing (React components → react-expert react-testing, Laravel → laravel-testing) or browser E2E suites.
SKILL.md
3.8 KB, 855 tokens by cl100k_base, as published. Nobody here has run it
TypeScript Testing
Pick the right runner, then write tests with a shared Jest-compatible API.
Agent Workflow (MANDATORY)
Before ANY implementation, use TeamCreate to spawn 3 agents:
- fuse-ai-pilot:explore-codebase - Detect existing runner, config, test layout
- fuse-ai-pilot:research-expert - Verify latest bun test / Vitest docs via Context7/Exa
- mcp__context7__query-docs - Check mock, coverage, config APIs
After implementation, run fuse-ai-pilot:sniper for validation.
Overview
Both runners share a Jest-like API (describe/it/expect, lifecycle hooks,
snapshots, mocks). They differ on speed, coverage maturity, and CI scaling.
| Runner | Strength | Weakness |
|---|---|---|
bun test | Fastest cold start, zero-config TS/JSX, built-in | Single process, experimental coverage, mock limits |
| Vitest | V8/Istanbul coverage, multi-worker CI scaling, ~Jest parity, browser mode | Needs Vite + config, slower cold start |
Critical Rules
- One runner per package - Never mix
bun:testandvitestimports bun run test, notbun test, when the runner is Vitest - Else Bun runs its own- Explicit coverage thresholds - Fail CI below target, don't just report
- Deterministic tests - Isolate shared state; use
--randomize(Bun) to catch order bugs - Mock at boundaries - Network/FS/time, never internal implementation detail
Decision Guide
Choosing a runner?
├── Greenfield, Bun runtime, fast local TDD → bun test
├── Large suite / heavy CI parallelism → Vitest (multi-worker)
├── Migrating from Jest / need full coverage → Vitest (V8 + Istanbul)
├── Component/DOM in real browser → Vitest browser mode (Playwright)
└── Zero-dependency script or CLI → bun test
→ See references/choosing-runner.md for the full matrix
Reference Guide
Concepts
| Topic | Reference | Load when |
|---|---|---|
| Runner selection | references/choosing-runner.md | Deciding bun test vs Vitest |
| Bun test runner | references/bun-test.md | Using bun test |
| Vitest | references/vitest.md | Using Vitest |
| Shared API | references/common-patterns.md | Writing describe/it/mock/snapshot |
Templates
| Template | Use Case |
|---|---|
references/templates/bun-setup.md | bunfig.toml + first Bun tests |
references/templates/vitest-setup.md | vitest.config.ts + coverage + CI |
Quick Start
Bun
import { test, expect } from "bun:test";
test("2 + 2", () => {
expect(2 + 2).toBe(4);
});
bun test --coverage
→ See references/templates/bun-setup.md
Vitest
import { test, expect } from "vitest";
test("adds 1 + 2", () => {
expect(1 + 2).toBe(3);
});
npx vitest run --coverage
→ See references/templates/vitest-setup.md
Best Practices
DO
- Colocate tests as
*.test.tsnext to source - Assert inside every
waitFor/async block - Set per-test timeouts for network-bound tests
DON'T
- Mix both runners in one package
- Rely on test execution order
- Ship experimental Bun coverage as the sole quality gate on huge suites
What ships with it: 7 files
13.5 KB alongside SKILL.md
references/
- bun-test.md2.7 KB
- choosing-runner.md2.5 KB
- common-patterns.md1.9 KB
- templates/bun-setup.md1.9 KB
- templates/vitest-setup.md2.2 KB
- vitest.md2.4 KB
- .gitkeep0 B