This file is the contributor runbook for testing in this repository.
For architecture details (runtime split, strict coverage model, and worker sandbox checks), see docs/testing/architecture.md.
- Monorepo package manager:
pnpm - Test runner:
vitest - Browser test runner:
@vitest/browser-playwright+ Playwright Chromium - Coverage provider:
istanbul - Root check entry: root scripts fan out to package-owned scripts
- Root coverage entry:
vitest.config.ts
Run from repo root:
First-time setup (once per machine) for browser tests:
pnpm --filter @tempad-dev/extension test:setup
Then run:
pnpm typecheckpnpm lintpnpm test:runpnpm test:coverage
Use this sequence as the default pre-PR verification.
Root:
pnpm test(watch package-owned tests in parallel)pnpm test:run(single run via package-ownedtest:runscripts)pnpm test:coverage(workspace coverage)pnpm --filter @tempad-dev/extension test:setup(install extension browser runtime)pnpm --filter @tempad-dev/extension test:node(extension node tests only)pnpm --filter @tempad-dev/extension test:browser(extension browser tests only)
Per package:
pnpm --filter @tempad-dev/extension test:run(includes worker sandbox check)pnpm --filter @tempad-dev/extension test:nodepnpm --filter @tempad-dev/extension test:browserpnpm --filter @tempad-dev/extension test:browser:headedpnpm --filter @tempad-dev/extension test:setuppnpm --filter @tempad-dev/extension test:coveragepnpm --filter @tempad-dev/plugins test:runpnpm --filter @tempad-dev/plugins test:coveragepnpm --filter @tempad-dev/mcp test:runpnpm --filter @tempad-dev/mcp test:coveragepnpm --filter @tempad-dev/shared test:runpnpm --filter @tempad-dev/shared test:coverage
Always:
pnpm typecheckpnpm lintpnpm test:run
When changing pure utility logic or formatters:
pnpm test:coverage- Keep coverage scope/threshold behavior aligned with Vitest configs and
docs/testing/architecture.md
When changing extension build/runtime behavior:
pnpm build:ext- If packaging impacted:
pnpm zip
When changing DOM/browser runtime behavior in extension:
pnpm --filter @tempad-dev/extension test:browser- Use Playwright browser tests only; do not add jsdom-based tests.
- Workspace coverage is configured in root
vitest.config.ts. - Coverage provider must stay
istanbulunless compatibility is re-verified. - Coverage output must not include build artifacts.
- Exclude:
**/dist/**,**/.output/**
- Exclude:
coverage/outputs are generated artifacts and should not be committed.
- Put tests under package-local
tests/. - Use file naming by runtime:
tests/**/*.browser.test.tsfor browser runtime behavior.tests/**/*.test.tsfor node runtime behavior.
- For extension browser tests, use Playwright via Vitest browser projects.
- Do not add jsdom test environment in this repository.
- Keep tests deterministic:
- no system clock dependence
- no random IDs without fixed seed
- no network or filesystem side effects in unit tests
- For mixed-purity files, only enforce strict coverage on intended pure exports.
- Add regression assertions for behavior changes in the same PR.
- Confirm coverage provider is
istanbul(notv8) in Vitest config. - Re-run with clean install if dependency graph recently changed:
pnpm installpnpm test:coverage
- Check root coverage excludes in
vitest.config.ts. - Ensure tests import source modules (
src/**,utils/**), not built artifacts.
- Root
test:rundelegates to packagetest:runscripts. - Root
test:coveragestill uses the root Vitest config and root-level include/exclude policy. - Validate against root
vitest.config.tsfirst.
- Install browser runtime:
pnpm --filter @tempad-dev/extension test:setup
- Re-run extension browser tests:
pnpm --filter @tempad-dev/extension test:browser
- Testing architecture:
docs/testing/architecture.md - Extension get_code requirements:
docs/extension/requirements.md - Extension get_code design:
docs/extension/design.md