Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates Vitest tests in JavaScript/TypeScript with Vite-native speed. Jest-compatible API with ESM support and HMR. Use when user mentions "Vitest", "vi.mock", "vitest.config". Triggers on: "Vitest", "vi.mock", "vi.fn", "Vite test", "vitest config".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 155% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 64% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 56% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 189% | 0% |
Use this skill when you need generates Vitest tests in JavaScript/TypeScript with Vite-native speed. Jest-compatible API with ESM support and HMR. Use when user mentions "Vitest", "vi.mock", "vitest.config". Triggers on: "Vitest", "vi.mock", "vi.fn", "Vite test", "vitest config".
typescriptimport { describe, it, expect, vi, beforeEach } from 'vitest'; import { Calculator } from './calculator'; describe('Calculator', () => { let calc: Calculator; beforeEach(() => { calc = new Calculator(); }); it('adds two numbers', () => { expect(calc.add(2, 3)).toBe(5); }); it('throws on divide by zero', () => { expect(() => calc.divide(10, 0)).toThrow(); }); });
typescriptimport { vi } from 'vitest'; // Mock module vi.mock('./database', () => ({ getUser: vi.fn().mockResolvedValue({ name: 'Alice' }), saveUser: vi.fn().mockResolvedValue(true), })); // Mock function const mockFn = vi.fn(); mockFn.mockReturnValue(42); mockFn.mockResolvedValue({ data: 'test' }); // Spy const spy = vi.spyOn(console, 'log').mockImplementation(() => {}); expect(spy).toHaveBeenCalledWith('message'); spy.mockRestore(); // Timers vi.useFakeTimers(); vi.advanceTimersByTime(1000); vi.runAllTimers(); vi.useRealTimers();
typescript// src/math.ts — tests alongside code! export function add(a: number, b: number) { return a + b; } export function multiply(a: number, b: number) { return a * b; } if (import.meta.vitest) { const { it, expect } = import.meta.vitest; it('adds', () => { expect(add(2, 3)).toBe(5); }); it('multiplies', () => { expect(multiply(3, 4)).toBe(12); }); }
typescriptit('serializes user', () => { expect(serializeUser(user)).toMatchSnapshot(); }); it('inline snapshot', () => { expect(serializeUser(user)).toMatchInlineSnapshot(` { "name": "Alice", "email": "alice@test.com" } `); });
typescriptimport { render, screen } from '@testing-library/react'; import { describe, it, expect } from 'vitest'; import Button from './Button'; describe('Button', () => { it('renders with label', () => { render(<Button label="Click me" />); expect(screen.getByText('Click me')).toBeDefined(); }); });
| Bad | Good | Why | |-----|------|-----| | jest.fn() | vi.fn() | Vitest uses vi | | jest.mock() | vi.mock() | Different namespace | | No type safety | TypeScript + strict | Vitest is TS-first |
| Task | Command | |------|---------| | Run once | npx vitest run | | Watch | npx vitest (default) | | UI | npx vitest --ui | | Coverage | npx vitest --coverage | | Specific file | npx vitest run src/math.test.ts | | Filter | npx vitest run -t "adds" |
typescriptimport { defineConfig } from 'vitest/config'; export default defineConfig({ test: { globals: true, environment: 'jsdom', coverage: { provider: 'v8', reporter: ['text', 'html'] }, include: ['src/**/*.{test,spec}.{js,ts,tsx}'], includeSource: ['src/**/*.{js,ts}'], }, });
reference/playbook.md| § | Section | Lines | |---|---------|-------| | 1 | Production Configuration | Config, workspace, setup file | | 2 | Mocking Patterns | vi.mock, spies, timers, fetch | | 3 | React Testing Library | Components, hooks, providers | | 4 | Snapshot & Inline Snapshots | File, inline, serializers | | 5 | Table-Driven Tests | test.each, describe.each | | 6 | In-Source Testing | Co-located tests in source | | 7 | API / Integration Testing | Server tests with fetch | | 8 | CI/CD Integration | GitHub Actions, scripts | | 9 | Debugging Quick-Reference | 10 common problems | | 10 | Best Practices Checklist | 13 items |
Other measured skills in the registry, with their headline benchmark lift.