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