К основному содержанию
скилл Claude Code CX Codex Cursor GitHub Copilot

test-driven-development · sickn33 — скилл для Claude Code

Внедряет строгий цикл разработки через тестирование: сначала падающий тест, затем минимальный рабочий код и рефакторинг. Пригодится при исправлении багов и добавлении новой логики.

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

Что делает test-driven-development

Скилл запрещает агенту писать продакшен-код до того, как запущен и проверен падающий тест. Сначала пишется проверка на реальном поведении системы, после чего разработчик или агент прогоняет тест в терминале проекта (npm test) и убеждается в ошибке. Только затем создаётся минимально необходимое решение.

Если реализация уже написана, скилл требует сохранить наработки пользователя, а не стирать ветку ради создания идеальной истории коммитов. В таких случаях агент добавляет регрессионные тесты и честно фиксирует, был ли тест написан до или после правок.

Для текстов интерфейса, генерируемых файлов или простых правок конфигурации этот скилл избыточен — в правилах прямо сказано проверять их точечной валидацией, а не вымученными модульными тестами.

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

  • воспроизвести баг падающим регрессионным тестом до внесения правок
  • реализовать новую функцию минимальным рабочим кодом по циклу TDD
  • провести безопасный рефакторинг при зелёных тестах
  • проверить поведение системы без избыточных моков

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

  • Используй TDD для исправления бага: форма не должна принимать пустой email
  • Напиши падающий тест на логику повторных попыток retryOperation, запусти его и покажи ошибку
  • Добавь минимальный код, чтобы тест функции submitForm стал зелёным, и сделай рефакторинг

Как установить test-driven-development

1Через Skills CLI (Vercel)

npx skills add sickn33/agentic-awesome-skills --skill test-driven-development -a claude-code

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

~/.claude/skills/test-driven-development/SKILL.md

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

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

Весь набор →
docker-expert sickn33 Скилл для ИИ-агента, который разбирает Dockerfile, multi-stage сборки и безопасность контейнеров. Пригодится, когда нужно навести порядок в образах и Compose. Claude Code CX Codex Cursor +1 27 200установок typescript-expert sickn33 Скилл для работы с TypeScript и JavaScript: разбирает типы, ускоряет проверку и помогает с миграциями. Пригодится, когда проект на TS растёт и компилятор начинает тормозить. Claude Code CX Codex Cursor +1 12 600установок browser-automation sickn33 Скилл помогает проверять браузерные сценарии по состоянию интерфейса и результату операции. Подходит для UI-тестов, диагностики таймингов и разрешённого сбора данных. Claude Code CX Codex Cursor +1 6 700установок nextjs-supabase-auth sickn33 Скилл настраивает Supabase Auth в Next.js App Router: клиенты, middleware, OAuth callback и Server Actions. Пригодится для защиты маршрутов и работы с сессиями. Claude Code CX Codex Cursor +1 6 500установок 3d-web-experience sickn33 Помогает создавать и отлаживать 3D-сцены, конфигураторы товаров и портфолио для веба. Разбирает выбор стека, загрузку моделей и производительность. Claude Code CX Codex Cursor +1 5 200установок prisma-expert sickn33 Скилл помогает разбирать схемы Prisma, миграции и запросы. Пригодится, когда нужно найти причину ошибки или проверить изменения перед деплоем. Claude Code CX Codex Cursor +1 4 200установок playwright-skill sickn33 Скилл для написания и запуска тестов браузера через Playwright: проверка вёрстки на разных экранах, скриншоты, тесты логина и заполнения форм. Код выполняется локально через Node. Claude Code CX Codex Cursor +1 3 900установок game-development sickn33 Координирует структуру игры: задаёт базовые принципы архитектуры и перенаправляет агента к подскиллам для веба, ПК, мобильных платформ или VR. Claude Code CX Codex Cursor +1 3 800установок

Другие версии test-driven-development

Похожие

mem0-test-integration mem0ai Проверяет интеграцию Mem0, которую собрала /mem0-integrate: ставит зависимости, гоняет тесты и сквозной сценарий с настоящим ключом, выдаёт scorecard. Claude Code CX Codex Cursor +1 323установок audit-prep-assistant trailofbits Скилл готовит репозиторий к внешнему аудиту безопасности по чеклисту Trail of Bits. Помогает сформулировать цели проверки, прогнать статический анализ и собрать документацию. Claude Code CX Codex Cursor +1 5 700установок semgrep-rule-creator trailofbits Скилл помогает создавать собственные Semgrep-правила для поиска уязвимостей безопасности и багов в коде. Пригодится, если нужно настроить статический анализ под конкретные паттерны вашего проекта. Claude Code CX Codex Cursor +1 5 700установок fix-merge-conflicts cursor Разрешает конфликты слияния в ветке, проверяет сборку и тесты перед завершением работы. Нужен, когда конфликтов несколько и их надо разобрать без рефакторинга. Claude Code CX Codex Cursor +1 2 700установок visual-verdict Yeachan-Heo Скилл сравнивает полученный скриншот интерфейса с референсными изображениями и возвращает JSON-вердикт для следующей итерации правок. Claude Code CX Codex Cursor +1 890установок ai-debt-detector Adit Jain Скилл проверяет код после генерации ИИ и ищет скрытые ошибки: пропущенную обработку сбоев, утечки ресурсов, лишние зависимости и архитектурный дрейф. Claude Code CX Codex Cursor 2 900установок improve-codebase-architecture Matt Pocock Скилл ищет архитектурные узкие места в кодовой базе и показывает варианты углубления модулей в HTML-отчёте. Подойдёт для ревью перед рефакторингом. Claude Code 1 163 035установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. Claude Code CX Codex Cursor +1 673 100установок

Вопросы о test-driven-development

Как установить test-driven-development в Claude Code?

Выполните в терминале команду npx skills add sickn33/agentic-awesome-skills --skill test-driven-development -a claude-code.

Что делает скилл test-driven-development?

Он направляет агента по методологии Red-Green-Refactor: заставляет написать падающий поведенческий тест, запустить его, написать минимальный код для прохождения и только потом выполнить рефакторинг.

Что делать по правилам скилла, если код функции уже написан без тестов?

Скилл запрещает удалять работу пользователя или сбрасывать ветку. Вместо этого нужно добавить тесты на текущее поведение и честно зафиксировать в отчёте, что тесты созданы после реализации.

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

SKILL.md · MIT
---
name: test-driven-development
description: "Use a failing behavioral test to guide a feature or bug fix, then implement and refactor with relevant regression checks."
risk: critical
source: community
date_added: "2026-02-27"
---

# Test-Driven Development (TDD)

## Overview

Write the test first. Watch it fail. Write minimal code to pass.

**Core principle:** If you didn't watch the test fail, you don't know if it tests the right thing.

**Violating the letter of the rules is violating the spirit of the rules.**

## When to Use

Use for behavior changes where a repeatable test can demonstrate the requirement or reproduce the bug. Inspect the repository’s test runner and existing coverage first. For copy, generated outputs or low-impact configuration, use the appropriate focused validation rather than manufacturing a unit test.

## Preserve existing work

Write the failing regression before the repair when feasible, and verify that it fails for the expected reason. If implementation already exists, preserve it and add characterization/regression tests. Do not delete user work, reset a branch or rewrite working code to reconstruct an ideal test-first history. State honestly whether the test preceded the fix.

## Red-Green-Refactor

```dot
digraph tdd_cycle {
    rankdir=LR;
    red [label="RED\nWrite failing test", shape=box, style=filled, fillcolor="#ffcccc"];
    verify_red [label="Verify fails\ncorrectly", shape=diamond];
    green [label="GREEN\nMinimal code", shape=box, style=filled, fillcolor="#ccffcc"];
    verify_green [label="Verify passes\nAll green", shape=diamond];
    refactor [label="REFACTOR\nClean up", shape=box, style=filled, fillcolor="#ccccff"];
    next [label="Next", shape=ellipse];

    red -> verify_red;
    verify_red -> green [label="yes"];
    verify_red -> red [label="wrong\nfailure"];
    green -> verify_green;
    verify_green -> refactor [label="yes"];
    verify_green -> green [label="no"];
    refactor -> verify_green [label="stay\ngreen"];
    verify_green -> next;
    next -> red;
}
```

### RED - Write Failing Test

Write one minimal test showing what should happen.

<Good>
```typescript
test('succeeds on the third attempt', async () => {
  let attempts = 0;
  const operation = async () => {
    attempts++;
    if (attempts < 3) throw new Error('fail');
    return 'success';
  };

  const result = await retryOperation(operation);

  expect(result).toBe('success');
  expect(attempts).toBe(3);
});
```
Clear name, tests real behavior, one thing
</Good>

<Bad>
```typescript
test('retry works', async () => {
  const mock = jest.fn()
    .mockRejectedValueOnce(new Error())
    .mockRejectedValueOnce(new Error())
    .mockResolvedValueOnce('success');
  await retryOperation(mock);
  expect(mock).toHaveBeenCalledTimes(3);
});
```
Vague name, tests mock not code
</Bad>

**Requirements:**
- One behavior
- Clear name
- Real code (no mocks unless unavoidable)

### Verify RED - Watch It Fail

**MANDATORY. Never skip.**

```bash
npm test path/to/test.test.ts
```

Confirm:
- Test fails (not errors)
- Failure message is expected
- Fails because feature missing (not typos)

**Test passes?** Determine whether it already characterizes the required behavior. For a regression, prove it detects the defect using the prior revision or an isolated controlled change; do not alter a correct assertion just to force red.

**Test errors?** Fix error, re-run until it fails correctly.

### GREEN - Minimal Code

Write simplest code to pass the test.

<Good>
```typescript
async function retryOperation<T>(fn: () => Promise<T>): Promise<T> {
  for (let i = 0; i < 3; i++) {
    try {
      return await fn();
    } catch (e) {
      if (i === 2) throw e;
    }
  }
  throw new Error('unreachable');
}
```
Just enough to pass
</Good>

<Bad>
```typescript
async function retryOperation<T>(
  fn: () => Promise<T>,
  options?: {
    maxRetries?: number;
    backoff?: 'linear' | 'exponential';
    onRetry?: (attempt: number) => void;
  }
): Promise<T> {
  // YAGNI
}
```
Over-engineered
</Bad>

Don't add features, refactor other code, or "improve" beyond the test.

### Verify GREEN - Watch It Pass

**MANDATORY.**

```bash
npm test path/to/test.test.ts
```

Confirm:
- Test passes
- Other tests still pass
- Output pristine (no errors, warnings)

**Test fails?** Fix code, not test.

**Other tests fail?** Fix now.

### REFACTOR - Clean Up

After green only:
- Remove duplication
- Improve names
- Extract helpers

Keep tests green. Don't add behavior.

### Repeat

Next failing test for next feature.

## Good Tests

| Quality | Good | Bad |
|---------|------|-----|
| **Minimal** | One thing. "and" in name? Split it. | `test('validates email and domain and whitespace')` |
| **Clear** | Name describes behavior | `test('test1')` |
| **Shows intent** | Demonstrates desired API | Obscures what code should do |

## Why order matters

A failing test can expose a misunderstood requirement before implementation. A test written after a fix can still be valuable, but its sensitivity to the original defect needs evidence. Neither timing nor coverage percentage proves the assertion is meaningful.

If a failure is caused by a missing import, unavailable service or bad fixture, repair that setup before interpreting the result. Use real boundaries where practical; a mock is useful when it isolates an external dependency while preserving the contract under test.

## Example: Bug Fix

**Bug:** Empty email accepted

**RED**
```typescript
test('rejects empty email', async () => {
  const result = await submitForm({ email: '' });
  expect(result.error).toBe('Email required');
});
```

**Verify RED**
```bash
$ npm test
FAIL: expected 'Email required', got undefined
```

**GREEN**
```typescript
function submitForm(data: FormData) {
  if (!data.email?.trim()) {
    return { error: 'Email required' };
  }
  // ...
}
```

**Verify GREEN**
```bash
$ npm test
PASS
```

**REFACTOR**
Extract validation for multiple fields if needed.

## Verification Checklist

Before marking work complete:

- [ ] Changed behavior and consequential failure paths have appropriate tests
- [ ] Regression sensitivity is demonstrated; timing of the test is reported honestly
- [ ] Each test failed for expected reason (feature missing, not typo)
- [ ] Wrote minimal code to pass each test
- [ ] All tests pass
- [ ] Output pristine (no errors, warnings)
- [ ] Tests use real code (mocks only if unavoidable)
- [ ] Edge cases and errors covered

Record any unmet check and its consequence. Do not erase work or claim an unobserved failure to complete a checklist.

## When Stuck

| Problem | Solution |
|---------|----------|
| Don't know how to test | Write wished-for API. Write assertion first. Ask your human partner. |
| Test too complicated | Design too complicated. Simplify interface. |
| Must mock everything | Code too coupled. Use dependency injection. |
| Test setup huge | Extract helpers. Still complex? Simplify design. |

## Debugging Integration

Bug found? Write failing test reproducing it. Follow TDD cycle. Test proves fix and prevents regression.

Prefer a reproducible regression for a bug fix; use another explicit verifier when a test cannot reasonably exercise the failure.

## Testing Anti-Patterns

When adding mocks or test utilities, read @testing-anti-patterns.md to avoid common pitfalls:
- Testing mock behavior instead of real behavior
- Adding test-only methods to production classes
- Mocking without understanding dependencies

## Inputs and expected result

You need the user-visible requirement, the current implementation, a known runner and a controlled fixture. In the empty-email example, the failure must be “missing validation”, not a network outage. Expected: the regression fails on the defective behavior and passes after the smallest repair, while existing valid submissions still work.

## Limitations

- A passing unit test does not prove browser, packaged-runtime or provider integration behavior.
- Retry examples assume retry-safe operations; production retries need explicit idempotency, cancellation and retryable-error policy.
- Test-first order does not prevent incorrect requirements or over-mocking. Inspect assertions and real boundaries.
- Preserve unrelated changes and use the project’s existing test commands rather than assuming every `npm test` accepts the same arguments.

© sickn33 · MIT · sickn33/agentic-awesome-skills

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

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

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