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
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-tdd skill
For API mocking with MSW, see test-msw skill
For TypeScript testing patterns, see typescript skill
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md
1---2name: vitest-23description: Vitest Best Practices4---5# Vitest Best Practices67Comprehensive 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.89## When to Apply1011Reference these guidelines when:12- Writing new Vitest tests13- Debugging flaky or slow tests14- Setting up test configuration15- Reviewing test code in PRs16- Migrating from Jest to Vitest17- Optimizing CI/CD test performance1819## Rule Categories by Priority2021| Priority | Category | Impact | Prefix |22|----------|----------|--------|--------|23| 1 | Async Patterns | CRITICAL | `async-` |24| 2 | Test Setup & Isolation | CRITICAL | `setup-` |25| 3 | Mocking Patterns | HIGH | `mock-` |26| 4 | Performance | HIGH | `perf-` |27| 5 | Snapshot Testing | MEDIUM | `snap-` |28| 6 | Environment | MEDIUM | `env-` |29| 7 | Assertions | LOW-MEDIUM | `assert-` |30| 8 | Test Organization | LOW | `org-` |3132## Quick Reference3334### 1. Async Patterns (CRITICAL)3536- `async-await-assertions` - Await async assertions to prevent false positives37- `async-return-promises` - Return promises from test functions38- `async-fake-timers` - Use fake timers for time-dependent code39- `async-waitfor-polling` - Use vi.waitFor for async conditions40- `async-concurrent-expect` - Use test context expect in concurrent tests41- `async-act-wrapper` - Await user events to avoid act warnings42- `async-error-handling` - Test async error handling properly4344### 2. Test Setup & Isolation (CRITICAL)4546- `setup-beforeeach-cleanup` - Clean up state in afterEach hooks47- `setup-restore-mocks` - Restore mocks after each test48- `setup-avoid-shared-state` - Avoid shared mutable state between tests49- `setup-beforeall-expensive` - Use beforeAll for expensive one-time setup50- `setup-reset-modules` - Reset modules when testing module state51- `setup-test-factories` - Use test factories for complex test data5253### 3. Mocking Patterns (HIGH)5455- `mock-vi-mock-hoisting` - Understand vi.mock hoisting behavior56- `mock-spyon-vs-mock` - Choose vi.spyOn vs vi.mock appropriately57- `mock-implementation-not-value` - Use mockImplementation for dynamic mocks58- `mock-msw-network` - Use MSW for network request mocking59- `mock-avoid-overmocking` - Avoid over-mocking60- `mock-type-safety` - Maintain type safety in mocks61- `mock-clear-between-tests` - Clear mock state between tests6263### 4. Performance (HIGH)6465- `perf-pool-selection` - Choose the right pool for performance66- `perf-disable-isolation` - Disable test isolation when safe67- `perf-happy-dom` - Use happy-dom over jsdom when possible68- `perf-sharding` - Use sharding for CI parallelization69- `perf-run-mode-ci` - Use run mode in CI environments70- `perf-bail-fast-fail` - Use bail for fast failure in CI7172### 5. Snapshot Testing (MEDIUM)7374- `snap-inline-over-file` - Prefer inline snapshots for small values75- `snap-avoid-large` - Avoid large snapshots76- `snap-stable-serialization` - Ensure stable snapshot serialization77- `snap-review-updates` - Review snapshot updates before committing78- `snap-describe-intent` - Name snapshot tests descriptively7980### 6. Environment (MEDIUM)8182- `env-per-file-override` - Override environment per file when needed83- `env-setup-files` - Use setup files for global configuration84- `env-globals-config` - Configure globals consistently85- `env-browser-api-mocking` - Mock browser APIs not available in test environment8687### 7. Assertions (LOW-MEDIUM)8889- `assert-specific-matchers` - Use specific matchers over generic ones90- `assert-edge-cases` - Test edge cases and boundaries91- `assert-one-assertion-concept` - Test one concept per test92- `assert-expect-assertions` - Use expect.assertions for async tests93- `assert-toequal-vs-tobe` - Choose toBe vs toEqual correctly9495### 8. Test Organization (LOW)9697- `org-file-colocation` - Colocate test files with source files98- `org-describe-nesting` - Use describe blocks for logical grouping99- `org-test-naming` - Write descriptive test names100- `org-test-skip-only` - Use skip and only appropriately101102## How to Use103104Read individual reference files for detailed explanations and code examples:105106- [Section definitions](references/_sections.md) - Category structure and impact levels107- [Rule template](assets/templates/_template.md) - Template for adding new rules108- [async-await-assertions](references/async-await-assertions.md) - Example rule file109- [mock-vi-mock-hoisting](references/mock-vi-mock-hoisting.md) - Example rule file110111## Related Skills112113- For TDD methodology, see `test-tdd` skill114- For API mocking with MSW, see `test-msw` skill115- For TypeScript testing patterns, see `typescript` skill116117## Full Compiled Document118119For the complete guide with all rules expanded: `AGENTS.md`
Run npx skillmds@latest add comeonoliver/vitest-2 in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Vitest Best Practices It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Independent scanners report: SkillSpector: PASS, Skill Scanner: PASS. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
ComeOnOliver (@comeonoliver) published this skill. Their other Agent Skills are listed on their SkillMD profile.