SKILL.md
Vitest Best Practices
Comprehensive performance optimization and best practices guide for Vitest testing framework. Contains 44 rules across 8 categories, prioritized by impact to guide test writing, refactoring, and code review.
When to Apply
Reference these guidelines when:
- Writing new Vitest tests
- Debugging flaky or slow tests
- Setting up test configuration
- Reviewing test code in PRs
- Migrating from Jest to Vitest
- Optimizing CI/CD test performance
Rule Categories by Priority
Priority
Category
Impact
Prefix
1
Async Patterns
CRITICAL
async-
2
Test Setup & Isolation
CRITICAL
setup-
3
Mocking Patterns
HIGH
mock-
4
Performance
HIGH
perf-
5
Snapshot Testing
MEDIUM
snap-
6
Environment
MEDIUM
env-
7
Assertions
LOW-MEDIUM
assert-
8
Test Organization
LOW
org-
Quick Reference
1. Async Patterns (CRITICAL)
async-await-assertions- Await async assertions to prevent false positives
async-return-promises- Return promises from test functions
async-fake-timers- Use fake timers for time-dependent code
async-waitfor-polling- Use vi.waitFor for async conditions
async-concurrent-expect- Use test context expect in concurrent tests
async-act-wrapper- Await user events to avoid act warnings
async-error-handling- Test async error handling properly
2. Test Setup & Isolation (CRITICAL)
setup-beforeeach-cleanup- Clean up state in afterEach hooks
setup-restore-mocks- Restore mocks after each test
setup-avoid-shared-state- Avoid shared mutable state between tests
setup-beforeall-expensive- Use beforeAll for expensive one-time setup
setup-reset-modules- Reset modules when testing module state
setup-test-factories- Use test factories for complex test data
3. Mocking Patterns (HIGH)
mock-vi-mock-hoisting- Understand vi.mock hoisting behavior
mock-spyon-vs-mock- Choose vi.spyOn vs vi.mock appropriately
mock-implementation-not-value- Use mockImplementation for dynamic mocks
mock-msw-network- Use MSW for network request mocking
mock-avoid-overmocking- Avoid over-mocking
mock-type-safety- Maintain type safety in mocks
mock-clear-between-tests- Clear mock state between tests
4. Performance (HIGH)
perf-pool-selection- Choose the right pool for performance
perf-disable-isolation- Disable test isolation when safe
perf-happy-dom- Use happy-dom over jsdom when possible
perf-sharding- Use sharding for CI parallelization
perf-run-mode-ci- Use run mode in CI environments
perf-bail-fast-fail- Use bail for fast failure in CI
5. Snapshot Testing (MEDIUM)
snap-inline-over-file- Prefer inline snapshots for small values
snap-avoid-large- Avoid large snapshots
snap-stable-serialization- Ensure stable snapshot serialization
snap-review-updates- Review snapshot updates before committing
snap-describe-intent- Name snapshot tests descriptively
6. Environment (MEDIUM)
env-per-file-override- Override environment per file when needed
env-setup-files- Use setup files for global configuration
env-globals-config- Configure globals consistently
env-browser-api-mocking- Mock browser APIs not available in test environment
7. Assertions (LOW-MEDIUM)
assert-specific-matchers- Use specific matchers over generic ones
assert-edge-cases- Test edge cases and boundaries
assert-one-assertion-concept- Test one concept per test
assert-expect-assertions- Use expect.assertions for async tests
assert-toequal-vs-tobe- Choose toBe vs toEqual correctly
8. Test Organization (LOW)
org-file-colocation- Colocate test files with source files
org-describe-nesting- Use describe blocks for logical grouping
org-test-naming- Write descriptive test names
org-test-skip-only- Use skip and only appropriately
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions - Category structure and impact levels
- Rule template - Template for adding new rules
- async-await-assertions - Example rule file
- mock-vi-mock-hoisting - Example rule file
Related Skills
- For TDD methodology, see
test-tddskill
- For API mocking with MSW, see
test-mswskill
- For TypeScript testing patterns, see
typescriptskill
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md