К основному содержанию
скилл CX Codex

vitest-skill — скилл для Claude Code: что делает и как установить

Генерирует юнит-тесты на Vitest для JavaScript и TypeScript проектов. Помогает настроить моки через vi и протестировать компоненты React.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add LambdaTest/agent-skills --skill vitest-skill -a claude-code
Открыть на GitHub

Что делает vitest-skill

Скилл задаёт правила генерации тестов под Vitest для JavaScript и TypeScript. Агент ориентируется на ESM и вызовы через объект vi (vi.fn(), vi.mock(), vi.spyOn()), а также таймеры vi.useFakeTimers(). Если проект мигрирует с Jest, скилл сразу пресекает вызовы jest.fn() и заставляет агента писать vi.fn().

Внутри собраны готовые шаблоны для проверки компонентов React через @testing-library/react и тестов прямо в исходном коде через import.meta.vitest. Также приведён рабочий пример vitest.config.ts с окружением jsdom и провайдером покрытия v8.

Какие задачи решает

  • перевести моки с Jest на API vi.mock и vi.fn
  • настроить конфигурацию vitest.config.ts под jsdom и v8
  • написать тесты React-компонентов с @testing-library/react
  • организовать in-source тестирование через import.meta.vitest

Примеры запросов агенту

  • Напиши юнит-тесты на Vitest для Calculator с проверкой деления на ноль
  • Сделай мок модуля базы данных через vi.mock и vi.fn
  • Создай конфигурационный файл vitest.config.ts для окружения jsdom

Как установить vitest-skill

1Через Skills CLI (Vercel)

npx skills add LambdaTest/agent-skills --skill vitest-skill -a claude-code

2Вручную: положить файлы

~/.claude/skills/vitest-skill/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/vitest-skill/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о vitest-skill

Как установить vitest-skill в Claude Code?

Выполните команду npx skills add LambdaTest/agent-skills --skill vitest-skill -a claude-code в терминале.

Что делает vitest-skill?

Скилл обучает ассистента генерировать тесты под Vitest с нативным ESM, моками vi, снепшотами и поддержкой React.

Чем моки в этом скилле отличаются от Jest?

Скилл запрещает методы jest.fn() и jest.mock(), заменяя их на вызовы vi.fn(), vi.mock() и vi.spyOn().

Исходный текст

SKILL.md · MIT
---
name: vitest-skill
description: >
  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".
languages:
  - JavaScript
  - TypeScript
category: unit-testing
license: MIT
metadata:
  author: TestMu AI
  version: "1.0"
---

# Vitest Testing Skill

## Core Patterns

### Basic Test

```typescript
import { 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();
  });
});
```

### Mocking (vi instead of jest)

```typescript
import { 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();
```

### In-Source Testing

```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); });
}
```

### Snapshot Testing

```typescript
it('serializes user', () => {
  expect(serializeUser(user)).toMatchSnapshot();
});

it('inline snapshot', () => {
  expect(serializeUser(user)).toMatchInlineSnapshot(`
    { "name": "Alice", "email": "[email protected]" }
  `);
});
```

### React Component Testing

```typescript
import { 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();
  });
});
```

### Anti-Patterns

| 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 |

## Quick Reference

| 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"` |

## vitest.config.ts

```typescript
import { 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}'],
  },
});
```

## Deep Patterns → `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 |

© TestMu AI · MIT · LambdaTest/agent-skills

Похожие скиллы

Всё по теме «Тесты и QA» →
vitest-unit-testing-cursorrules-prompt-file PatrickJS Правило задаёт Cursor поведение эксперта по Vitest и TypeScript: пишет юнит-тесты на бизнес-логику и утилиты, мокает зависимости через vi.mock. ★ 41 011звёзд репо vitest-testing secondsky Скилл для написания юнит- и интеграционных тестов на Vitest в проектах на TypeScript и JavaScript. Пригодится, когда нужно быстро настроить конфиг, моки и покрытие. CX Codex +1 1 200установок vitest pproenca Скилл даёт ИИ-агенту 44 правила для написания, отладки и ускорения тестов на Vitest. Помогает настроить моки, изолировать окружение и разобрать нестабильные проверки. CX Codex +1 6 100установок vitest-midscene-e2e web-infra-dev Скилл объединяет Vitest и Midscene для создания E2E-тестов на естественном языке под Web, Android и iOS. Помогает быстро развернуть бойлерплейт или наладить автотесты без селекторов. CX Codex +1 2 100установок react-testing affaan-m Скилл для написания тестов React-компонентов, хуков и страниц: React Testing Library, Vitest или Jest, MSW для моков сети и проверки доступности через axe. CX Codex +1 4 800установок unit-test-vue-pinia официальный github Помогает писать и проверять юнит-тесты для Vue 3, TypeScript, Vitest и Pinia. Пригодится, когда тесты уже есть, но лезут во внутренности компонентов. 1 800установок

Из того же набора5

Спонсоры проекта

Компании, которые помогают держать аналитику открытой