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

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

Скилл для ИИ-агента: подсказывает, как писать тесты на Vitest — ассерты, моки, асинхронность, конфиг. Пригодится, когда в проекте уже стоит Vitest.

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

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

Скилл даёт агенту справочник по Vitest: базовые ассерты (toBe, toEqual, toStrictEqual, toBeCloseTo), проверки строк, массивов и объектов, работу с исключениями через toThrow. Есть раздел про асинхронные тесты — там прямо сказано, что expect(...).resolves и expect(...).rejects всегда идут с await, иначе тест проходит ложно.

Моки описаны через vi.fn() и vi.mock: возвращаемые значения, mockResolvedValue, проверки вызовов. Для каждого теста скилл советует чистить моки в beforeEach через vi.clearAllMocks(). Отдельно разобраны методы it.todo, it.skip, it.only, .concurrent и .each([...]) для параметризованных прогонов.

Внутри есть последовательность проверок при добавлении или правке тестов. Первый шаг — запустить ту же команду, что и CI (смотрите скрипты в package.json, часто это vitest run), и убедиться, что код выхода 0 и падений нет. Второй шаг — пройтись по строкам с resolves и rejects и проверить, что везде стоит await. Тематику глубже раскрывают три файла в references/: моки, конфигурация и паттерны с таймерами и снапшотами. Скилл заточен под проекты на Vitest, в другом тест-раннере его подсказки не сработают.

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

  • написать юнит-тест на функцию с асинхронным вызовом
  • настроить vitest.config и файлы setup
  • замокать модуль через vi.mock и проверить вызовы
  • поймать тест, который проходит ложно из-за забытого await
  • разметить параметризованные тесты через .each([...])

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

  • напиши тесты на Vitest для этого модуля, замокай fetchData через vi.mock
  • проверь мои тесты: везде ли await перед expect(...).resolves и rejects
  • добавь параметризованный тест через it.each на эти три случая

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

1Через Skills CLI (Vercel)

npx skills add existential-birds/beagle --skill vitest-testing -a claude-code

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

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

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

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

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

react-flow Помогает ассистенту создавать интерактивные диаграммы и графы на базе @xyflow/react. Пригодится при настройке узлов, связей и управлении зумом. CX Codex +1 1 300установок python-code-review Скилл проверяет файлы Python на ошибки в типах, блокирующие вызовы в async-функциях и нарушение PEP8. Пригодится при подготовке пуллреквестов и чистке кодовой базы. CX Codex +1 920установок langgraph-code-review Скилл проверяет код на базе LangGraph в Claude Code и других агентах. Он находит мутации состояния, пропущенные редьюсеры и ошибки в узлах графа. CX Codex +1 884установок tailwind-v4 Скилл для ИИ-агента, который подсказывает, как настроить Tailwind CSS v4: тема в CSS, токены дизайна, цвета OKLCH и тёмная тема. CX Codex +1 812установок react-router-v7 Скилл с практиками React Router v7: подсказывает, когда брать loader, Form или fetcher, и как настраивать вложенные маршруты. CX Codex +1 572установок shadcn-ui Подсказывает агенту, как собирать компоненты на shadcn/ui: Radix, Tailwind, CVA-варианты и data-slot. CX Codex +1 351установок react-flow-code-review Проверяет код на @xyflow/react по чек-листу: антипаттерны, лишние ре-рендеры, типы. Пригодится, когда граф тормозит или ноды пересоздаются. CX Codex +1 319установок

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

Похожие

vitest pproenca Скилл даёт ИИ-агенту 44 правила для написания, отладки и ускорения тестов на Vitest. Помогает настроить моки, изолировать окружение и разобрать нестабильные проверки. CX Codex +1 6 100установок vitest-unit-testing-cursorrules-prompt-file PatrickJS Правило задаёт Cursor поведение эксперта по Vitest и TypeScript: пишет юнит-тесты на бизнес-логику и утилиты, мокает зависимости через vi.mock. ★ 41 011звёзд репо testing-best-practices agent-skills Набор правил по юнит- и интеграционным тестам и TDD: 34 правила в 7 категориях на TypeScript с Jest и Vitest. Пригодится, когда пишете тесты или разбираете чужие. CX Codex +1 899установок vitest-skill TestMu AI Генерирует юнит-тесты на Vitest для JavaScript и TypeScript проектов. Помогает настроить моки через vi и протестировать компоненты React. CX Codex +1 448установок unit-test-vue-pinia официальный github Помогает писать и проверять юнит-тесты для Vue 3, TypeScript, Vitest и Pinia. Пригодится, когда тесты уже есть, но лезут во внутренности компонентов. 1 800установок unit-testing-framework aj-geddes Скилл задаёт агенту правила написания юнит-тестов: структура Arrange-Act-Assert, моки, граничные случаи. Пригодится, когда нужно покрыть тестами новую функцию или класс. CX Codex +1 593установок

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

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

Вопросы о vitest-testing

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

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

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

Даёт агенту справочник по Vitest: ассерты, асинхронные матчеры, моки через vi.fn и vi.mock, методы it.skip и it.todo, а также шаги проверки тестов перед коммитом.

Что нужно, чтобы скилл заработал?

Проект на Vitest: команды запуска тестов берутся из скриптов package.json. В другом тест-раннере подсказки скилла не подойдут.

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

SKILL.md · Apache-2.0
---
name: vitest-testing
description: Vitest testing framework patterns and best practices. Use when writing unit tests, integration tests, configuring vitest.config, mocking with vi.mock/vi.fn, using snapshots, or setting up test coverage. Triggers on describe, it, expect, vi.mock, vi.fn, beforeEach, afterEach, vitest.
---

# Vitest Best Practices

## Quick Reference

```ts
import { describe, it, expect, beforeEach, vi } from 'vitest'

describe('feature name', () => {
  beforeEach(() => {
    vi.clearAllMocks()
  })

  it('should do something specific', () => {
    expect(actual).toBe(expected)
  })

  it.todo('planned test')
  it.skip('temporarily disabled')
  it.only('run only this during dev')
})
```

## Common Assertions

```ts
// Equality
expect(value).toBe(42)                    // Strict (===)
expect(obj).toEqual({ a: 1 })             // Deep equality
expect(obj).toStrictEqual({ a: 1 })       // Strict deep (checks types)

// Truthiness
expect(value).toBeTruthy()
expect(value).toBeFalsy()
expect(value).toBeNull()
expect(value).toBeUndefined()

// Numbers
expect(0.1 + 0.2).toBeCloseTo(0.3)
expect(value).toBeGreaterThan(5)

// Strings/Arrays
expect(str).toMatch(/pattern/)
expect(str).toContain('substring')
expect(array).toContain(item)
expect(array).toHaveLength(3)

// Objects
expect(obj).toHaveProperty('key')
expect(obj).toHaveProperty('nested.key', 'value')
expect(obj).toMatchObject({ subset: 'of properties' })

// Exceptions
expect(() => fn()).toThrow()
expect(() => fn()).toThrow('error message')
expect(() => fn()).toThrow(/pattern/)
```

## Async Testing

```ts
// Async/await (preferred)
it('fetches data', async () => {
  const data = await fetchData()
  expect(data).toEqual({ id: 1 })
})

// Promise matchers - ALWAYS await these
await expect(fetchData()).resolves.toEqual({ id: 1 })
await expect(fetchData()).rejects.toThrow('Error')

// Wrong - creates false positive
expect(promise).resolves.toBe(value)  // Missing await!
```

## Quick Mock Reference

```ts
const mockFn = vi.fn()
mockFn.mockReturnValue(42)
mockFn.mockResolvedValue({ data: 'value' })

expect(mockFn).toHaveBeenCalled()
expect(mockFn).toHaveBeenCalledWith('arg1', 'arg2')
expect(mockFn).toHaveBeenCalledTimes(2)
```

## Verification gates

Use this sequence when you add or change tests; each step has an objective pass condition.

1. **Run the test suite** — From the package or workspace root, run the same command CI uses (check `package.json` scripts; often `vitest run`, `pnpm test`, or `npm test`). **Pass:** exit code is 0 and the report shows zero failing tests.
2. **Async matchers** — **Pass:** every `expect(…).resolves` and `expect(…).rejects` is prefixed with `await` (`await expect(...)`), as in [Async Testing](#async-testing). A line where `resolves` or `rejects` appears without `await` fails this gate.

## Additional Documentation

- **Mocking**: See [references/mocking.md](references/mocking.md) for module mocking, spying, cleanup
- **Configuration**: See [references/config.md](references/config.md) for vitest.config, setup files, coverage
- **Patterns**: See [references/patterns.md](references/patterns.md) for timers, snapshots, anti-patterns

## Test Methods Quick Reference

| Method | Purpose |
|--------|---------|
| `it()` / `test()` | Define test |
| `describe()` | Group tests |
| `beforeEach()` / `afterEach()` | Per-test hooks |
| `beforeAll()` / `afterAll()` | Per-suite hooks |
| `.skip` | Skip test/suite |
| `.only` | Run only this |
| `.todo` | Placeholder |
| `.concurrent` | Parallel execution |
| `.each([...])` | Parameterized tests |

© existential-birds · Apache-2.0 · existential-birds/beagle

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

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

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