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

vitest-testing · secondsky — скилл для Claude Code: тесты на Vitest

Скилл для написания юнит- и интеграционных тестов на Vitest в проектах на TypeScript и JavaScript. Пригодится, когда нужно быстро настроить конфиг, моки и покрытие.

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

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

Скилл даёт агенту рабочие знания по Vitest: как настроить vitest.config.ts, писать describe/it/expect, параметризовать тесты через describe.each, мокать функции и модули через vi, управлять таймерами и системным временем. Есть раздел про покрытие с провайдером v8 и порогами по строкам, функциям и веткам.

Внутри — примеры конфигурации, шпаргалка по ассертам, мокинг модулей и таймеров, интеграционные тесты через supertest. Отдельный блок с практиками: один файл теста на файл исходника, группировка через describe(), дорогие фикстуры в beforeAll(). Советует держать покрытие около 80% и не гнаться за 100%.

Скилл опирается на Bun в примерах команд (bun test, bun add -d vitest), но есть и вариант с npm install -D vitest. Если в проекте не Bun, команды запуска придётся заменить на свои. Для интеграционных тестов в примерах используется supertest — это повод проверить, есть ли он у вас в зависимостях.

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

  • настроить vitest.config.ts с покрытием и порогами
  • замокать модуль и сбросить моки между тестами
  • проверить асинхронный код через resolves и rejects
  • подменить системное время в тесте
  • написать интеграционный тест HTTP-эндпоинта

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

  • Настрой Vitest в этом проекте: создай vitest.config.ts с покрытием v8 и порогами 80%
  • Напиши тесты для src/utils/math.ts с параметризацией через describe.each
  • Замокай модуль ./api и проверь, что fetchUser вызывается один раз

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

1Через Skills CLI (Vercel)

npx skills add secondsky/claude-skills --skill vitest-testing -a claude-code

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

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

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

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

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

tailwind-v4-shadcn Скилл настраивает связку Tailwind CSS v4, shadcn/ui и React в проектах на Vite. Помогает избежать ошибок импорта и поломки CSS-переменных при переключении тем оформления. CX Codex +1 8 100установок code-review Скилл задаёт правила код-ревью: как принимать замечания, когда звать субагента-ревьюера и как не заявлять о готовности без проверки. CX Codex +1 530установок mcp-management Управляет серверами Model Context Protocol, каталогизирует их инструменты в JSON и запускает вызовы через Gemini CLI, скрипты Bun или субагента без засорения контекста. CX Codex +1 382установок aceternity-ui Скилл подключает к агенту библиотеку Aceternity UI: больше 100 анимированных компонентов React для Next.js с Tailwind. Пригодится, когда нужен hero-блок, параллакс или 3D-эффект. CX Codex +1 1 500установок motion Скилл по библиотеке Motion для React: подсказывает, как собрать drag-and-drop, scroll-анимации и переходы макета. Пригодится, когда агент путает пропсы или ломает exit-анимации. CX Codex +1 1 100установок playwright Скилл для браузерной автоматизации и E2E-тестов на Playwright. Сам находит запущенный dev-сервер и пишет скрипты под вашу задачу. CX Codex +1 1 000установок api-testing Скилл учит агента писать тесты HTTP API: Supertest в TypeScript, httpx и pytest в Python. Пригодится, когда нужно закрыть REST, GraphQL и проверку ошибок. CX Codex +1 890установок rest-api-design Скилл задаёт агенту конвенции REST: имена ресурсов, HTTP-методы, коды ответов и формат JSON. Пригодится, когда проектируешь новый API или приводишь к общему виду уже существующий. CX Codex +1 586установок

Другие версии vitest-testing

Похожие

vitest Anthony Fu Скилл помогает писать тесты на Vitest, настраивать моки и покрытие. Пригодится, когда нужно разобраться с фильтрацией тестов или фикстурами. CX Codex +1 43 800установок vitest-unit-testing-cursorrules-prompt-file PatrickJS Правило задаёт Cursor поведение эксперта по Vitest и TypeScript: пишет юнит-тесты на бизнес-логику и утилиты, мокает зависимости через vi.mock. ★ 41 011звёзд репо vitest-skill TestMu AI Генерирует юнит-тесты на Vitest для JavaScript и TypeScript проектов. Помогает настроить моки через vi и протестировать компоненты React. CX Codex +1 448установок javascript-testing-patterns Seth Hobson Скилл подсказывает, как писать unit-, интеграционные и end-to-end-тесты для JavaScript и TypeScript. Пригодится при настройке тестовой инфраструктуры и работе по TDD. CX Codex 20 472установок testing-patterns davila7 Скилл для Claude с готовыми паттернами тестирования на Jest: фабрики данных, моки и цикл red-green-refactor. 365установок vue-expert-js https://github.com/Jeffallan Создаёт Vue 3-код на JavaScript с JSDoc-аннотациями вместо TypeScript. Пригодится для компонентов, композаблов, роутинга и состояния в проектах без TS. CX Codex +1 4 100установок

Рядом в теме «Тесты и QA»

Всё по теме «Тесты и QA» →

Вопросы о vitest-testing

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

Выполните npx skills add secondsky/claude-skills --skill vitest-testing -a claude-code. Файл скилла окажется в ~/.claude/skills/vitest-testing/SKILL.md.

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

Даёт агенту знания по тестированию TS/JS-проектов на Vitest: конфигурация, ассерты, моки функций и модулей, фейковые таймеры, покрытие и интеграционные тесты.

Нужен ли Bun для работы скилла?

В примерах команд используется Bun, но установка через npm install -D vitest тоже показана. Если у вас другой пакетный менеджер, команды запуска тестов придётся адаптировать.

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

SKILL.md · MIT
---
name: vitest-testing
description: Modern TypeScript/JavaScript testing with Vitest. Fast unit and integration tests, native ESM support, Vite-powered HMR, and comprehensive mocking. Use for testing TS/JS projects.
allowed-tools: Bash, Read, Edit, Write, Grep, Glob, TodoWrite
license: MIT
---

# Vitest Testing

Expert knowledge for testing JavaScript/TypeScript projects using Vitest - a blazingly fast testing framework powered by Vite.

## Quick Start

### Installation

```bash
# Using Bun (recommended)
bun add -d vitest

# Using npm
npm install -D vitest
```

### Configuration

```typescript
// vitest.config.ts
import { defineConfig } from 'vitest/config'

export default defineConfig({
  test: {
    globals: true,
    environment: 'node', // or 'jsdom'
    coverage: {
      provider: 'v8',
      reporter: ['text', 'json', 'html'],
      thresholds: { lines: 80, functions: 80, branches: 80 },
    },
    include: ['**/*.{test,spec}.{js,ts,jsx,tsx}'],
  },
})
```

## Running Tests

```bash
# Run all tests (prefer bun)
bun test

# Watch mode (default)
bun test --watch

# Run once (CI mode)
bun test --run

# With coverage
bun test --coverage

# Specific file
bun test src/utils/math.test.ts

# Pattern matching
bun test --grep="calculates sum"

# UI mode (interactive)
bun test --ui

# Verbose output (in Vitest 2+, --reporter=verbose prints a flat list;
# use --reporter=tree for the hierarchical tree view)
bun test --reporter=verbose
```

## Writing Tests

### Basic Structure

```typescript
import { describe, it, expect, beforeEach, afterEach } from 'vitest'
import { add, subtract } from './math'

describe('Math utilities', () => {
  beforeEach(() => {
    // Setup before each test
  })

  it('adds two numbers correctly', () => {
    expect(add(2, 3)).toBe(5)
  })

  it('subtracts two numbers correctly', () => {
    expect(subtract(5, 3)).toBe(2)
  })
})
```

### Parametrized Tests

```typescript
describe.each([
  { input: 2, expected: 4 },
  { input: 3, expected: 9 },
])('square function', ({ input, expected }) => {
  it(`squares ${input} to ${expected}`, () => {
    expect(square(input)).toBe(expected)
  })
})
```

## Assertions

```typescript
// Equality
expect(value).toBe(expected)
expect(value).toEqual(expected)

// Truthiness
expect(value).toBeTruthy()
expect(value).toBeNull()
expect(value).toBeDefined()

// Numbers
expect(number).toBeGreaterThan(3)
expect(number).toBeCloseTo(0.3, 1)

// Strings/Arrays
expect(string).toMatch(/pattern/)
expect(array).toContain(item)

// Objects
expect(object).toHaveProperty('key')
expect(object).toMatchObject({ a: 1 })

// Exceptions
expect(() => throwError()).toThrow('message')

// Promises
await expect(promise).resolves.toBe(value)
await expect(promise).rejects.toThrow()
```

## Mocking

### Function Mocks

```typescript
import { vi } from 'vitest'

const mockFn = vi.fn()
mockFn.mockReturnValue(42)
mockFn.mockResolvedValue('async result')
mockFn.mockImplementation((x) => x * 2)

expect(mockFn).toHaveBeenCalled()
expect(mockFn).toHaveBeenCalledWith('arg')
```

### Module Mocking

```typescript
vi.mock('./api', () => ({
  fetchUser: vi.fn(() => ({ id: 1, name: 'Test User' })),
}))

import { fetchUser } from './api'

beforeEach(() => {
  vi.clearAllMocks()
})
```

### Timers

```typescript
beforeEach(() => vi.useFakeTimers())
afterEach(() => vi.restoreAllMocks())

it('advances timers', () => {
  const callback = vi.fn()
  setTimeout(callback, 1000)
  vi.advanceTimersByTime(1000)
  expect(callback).toHaveBeenCalledOnce()
})

it('mocks dates', () => {
  const date = new Date('2024-01-01')
  vi.setSystemTime(date)
  expect(Date.now()).toBe(date.getTime())
})
```

## Coverage

```bash
# Generate coverage report
bun test --coverage

# HTML report
bun test --coverage --coverage.reporter=html
open coverage/index.html

# Check against thresholds
bun test --coverage --coverage.thresholds.lines=90
```

## Integration Testing

```typescript
import request from 'supertest'
import { app } from './app'

describe('API endpoints', () => {
  it('creates a user', async () => {
    const response = await request(app)
      .post('/api/users')
      .send({ name: 'John' })
      .expect(201)

    expect(response.body).toMatchObject({
      id: expect.any(Number),
      name: 'John',
    })
  })
})
```

## Best Practices

- One test file per source file: `math.ts` → `math.test.ts`
- Group related tests with `describe()` blocks
- Use descriptive test names
- Mock only external dependencies
- Use `concurrent` tests for independent async tests
- Share expensive fixtures with `beforeAll()`
- Aim for 80%+ coverage but don't chase 100%

## See Also

- `test-quality-analysis` - Detecting test smells
- `playwright-testing` - E2E testing
- `mutation-testing` - Validate test effectiveness

© secondsky · MIT · secondsky/claude-skills

Смотрите также

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

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