PluginBench
Skill
Pass
Audit score 90

vitest

pproenca/dot-skills

Vitest testing framework patterns: async, mocking, setup, snapshots, and performance optimization.

What is vitest?

Comprehensive guide to Vitest best practices covering test setup, async patterns, mocking with vi.*, snapshots, and performance tuning. Use this when writing, debugging, or optimizing Vitest tests—excludes TDD methodology and MSW API mocking.

  • 44 prioritized rules across 8 categories: async patterns, test setup & isolation, mocking, performance, snapshots, environment, assertions, and organization
  • Async pattern guidance: await assertions, return promises, fake timers, vi.waitFor, and error handling
  • Test isolation best practices: cleanup hooks, mock restoration, module resets, and test factories
  • Mocking strategies: vi.mock vs vi.spyOn, implementation patterns, type safety, and avoiding over-mocking
  • Performance tuning: pool selection, test isolation trade-offs, happy-dom vs jsdom, sharding, and CI optimization
  • Snapshot testing rules: inline vs file snapshots, stability, and review practices

How to install vitest

npx skills add https://github.com/pproenca/dot-skills --skill vitest
Claude Code
Cursor
Windsurf
Cline

How to use vitest

  1. 1.Reference the 8 rule categories by priority when writing or reviewing tests
  2. 2.Consult async patterns (CRITICAL) for any test involving promises or time-dependent code
  3. 3.Apply test setup & isolation rules (CRITICAL) to prevent state leakage between tests
  4. 4.Use mocking patterns (HIGH) to choose between vi.mock, vi.spyOn, and MSW appropriately
  5. 5.Check performance rules (HIGH) when tests are slow or CI is bottlenecked
  6. 6.Review snapshot, environment, assertion, and organization rules for code quality

Use cases

Good for
  • Writing new Vitest test suites with proper async handling and isolation
  • Debugging flaky or slow tests using performance and async pattern guidelines
  • Setting up test configuration and environment for consistent test behavior
  • Reviewing test code in pull requests against best practices
  • Migrating existing Jest tests to Vitest with pattern equivalents
Who it's for
  • Frontend and full-stack developers writing Vitest tests
  • QA engineers setting up test infrastructure
  • Teams migrating from Jest to Vitest
  • Code reviewers evaluating test quality
  • DevOps engineers optimizing CI/CD test performance

vitest FAQ

When should I use vi.mock vs vi.spyOn?

Use vi.mock for module-level mocking with hoisting; use vi.spyOn for selective method spying on existing objects. The mock-spyon-vs-mock rule provides detailed guidance.

How do I avoid flaky async tests?

Await async assertions, return promises from test functions, use vi.waitFor for polling conditions, and avoid act warnings by awaiting user events. See async patterns (CRITICAL) category.

What's the difference between happy-dom and jsdom?

happy-dom is lighter and faster for most UI tests; jsdom is more complete but slower. Use happy-dom when possible for performance (perf-happy-dom rule).

How do I optimize test performance in CI?

Use sharding for parallelization, run mode instead of watch mode, choose the right pool (threads vs forks), and consider disabling test isolation when safe.

Does this skill cover TDD or MSW mocking?

No. For TDD methodology, use the test-tdd skill. For API mocking with MSW, use the test-msw skill. This skill focuses on Vitest framework patterns and vi.* APIs.

Full instructions (SKILL.md)

Source of truth, from pproenca/dot-skills.


name: vitest description: Vitest testing framework patterns for test setup, async testing, mocking with vi.*, snapshots, and test performance (formerly test-vitest). This skill should be used when writing or debugging Vitest tests. This skill does NOT cover TDD methodology (use test-tdd skill), API mocking with MSW (use test-msw skill), or Jest-specific APIs.

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

PriorityCategoryImpactPrefix
1Async PatternsCRITICALasync-
2Test Setup & IsolationCRITICALsetup-
3Mocking PatternsHIGHmock-
4PerformanceHIGHperf-
5Snapshot TestingMEDIUMsnap-
6EnvironmentMEDIUMenv-
7AssertionsLOW-MEDIUMassert-
8Test OrganizationLOWorg-

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:

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