vitest testing

Vitest is a modern test runner designed for Vite projects. It's fast, ESM-native, and provides a Jest-compatible API with better TypeScript support and instant HMR-powered watch mode.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "vitest testing" with this command: npx skills add laurigates/claude-plugins/laurigates-claude-plugins-vitest-testing

Vitest Testing

Vitest is a modern test runner designed for Vite projects. It's fast, ESM-native, and provides a Jest-compatible API with better TypeScript support and instant HMR-powered watch mode.

When to Use This Skill

Use this skill when... Use another skill instead when...

Setting up or configuring Vitest Writing E2E browser tests (use playwright-testing)

Writing unit/integration tests in TS/JS Testing Python code (use python-testing)

Migrating from Jest to Vitest Analyzing test quality (use test-quality-analysis)

Configuring coverage thresholds Generating property-based tests (use property-based-testing)

Using mocks, spies, or fake timers Validating test effectiveness (use mutation-testing)

Core Expertise

  • Vite-native: Reuses Vite config, transforms, and plugins

  • Fast: Instant feedback with HMR-powered watch mode

  • Jest-compatible: Drop-in replacement with similar API

  • TypeScript: First-class TypeScript support

  • ESM: Native ESM support, no transpilation needed

Installation

bun add --dev vitest bun add --dev @vitest/coverage-v8 # Coverage (recommended) bun add --dev happy-dom # DOM testing (optional) bunx vitest --version # Verify

Configuration (vitest.config.ts)

import { defineConfig } from 'vitest/config';

export default defineConfig({ test: { globals: true, environment: 'node', }, });

Essential Commands

bunx vitest # Watch mode (default) bunx vitest run # Run once (CI mode) bunx vitest --coverage # With coverage bunx vitest src/utils.test.ts # Specific file bunx vitest -t "should add numbers" # Filter by name bunx vitest related src/utils.ts # Related tests bunx vitest -u # Update snapshots bunx vitest bench # Benchmarks bunx vitest --ui # UI mode

Writing Tests

Basic Test Structure

import { describe, it, expect } from 'vitest'; import { add, multiply } from './math';

describe('math utils', () => { it('should add two numbers', () => { expect(add(2, 3)).toBe(5); });

it('should multiply two numbers', () => { expect(multiply(2, 3)).toBe(6); }); });

Key Assertions

Assertion Description

toBe(value)

Strict equality

toEqual(value)

Deep equality

toStrictEqual(value)

Deep strict equality

toBeTruthy() / toBeFalsy()

Truthiness

toBeNull() / toBeUndefined()

Null checks

toBeGreaterThan(n) / toBeLessThan(n)

Numeric comparison

toBeCloseTo(n)

Float comparison

toMatch(regex) / toContain(str)

String matching

toHaveLength(n)

Array/string length

toHaveProperty(key)

Object property

toMatchObject(obj)

Partial object match

toThrow(msg)

Error throwing

Async Tests

test('async test', async () => { const data = await fetchData(); expect(data).toBe('expected'); });

test('promise resolves', async () => { await expect(fetchData()).resolves.toBe('expected'); });

test('promise rejects', async () => { await expect(fetchBadData()).rejects.toThrow('error'); });

Mocking (Essential Patterns)

import { vi, test, expect } from 'vitest';

// Mock function const mockFn = vi.fn(); mockFn.mockReturnValue(42);

// Mock module vi.mock('./api', () => ({ fetchUser: vi.fn(() => Promise.resolve({ id: 1, name: 'John' })), }));

// Mock timers vi.useFakeTimers(); vi.advanceTimersByTime(1000); vi.restoreAllMocks();

// Spy on method const spy = vi.spyOn(object, 'method');

Snapshot Testing

test('snapshot test', () => { expect(data).toMatchSnapshot(); });

test('inline snapshot', () => { expect(result).toMatchInlineSnapshot('5'); }); // Update snapshots: bunx vitest -u

Coverage

bun add --dev @vitest/coverage-v8 bunx vitest --coverage

Key config options: provider , reporter , include , exclude , thresholds .

Agentic Optimizations

Context Command

Quick test bunx vitest --reporter=dot --bail=1

CI test bunx vitest run --reporter=junit

Coverage check bunx vitest --coverage --reporter=dot

Single file bunx vitest run src/utils.test.ts --reporter=dot

Failed only bunx vitest --changed --bail=1

For detailed examples, advanced patterns, and best practices, see REFERENCE.md.

References

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

python-code-quality

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

python-development

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

python-testing

No summary provided by upstream source.

Repository SourceNeeds Review