Use when about to fix a bug or add new logic - a function, a branch of behaviour, an input check, a calculation - before writing the implementation code. Not for configuration, documentation, layout or a prototype the user called throwaway.
Installs into .claude/skills of the current project.
Sponsors
SSkills DirectorySkills Directory
Know which skills are safe — weekly.
SSkills DirectorySkills Directory
Is that skill safe to install?
Are you the author of Test First?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/sergvss-test-first)
---
name: test-first
description: Use when about to fix a bug or add new logic - a function, a branch of behaviour, an input check, a calculation - before writing the implementation code. Not for configuration, documentation, layout or a prototype the user called throwaway.
---
# Тест сначала
1. **Красный.** Один тест на одно поведение; имя называет поломку, которую он ловит.
2. **Проверь красный — обязательно.** Запусти: тест падает на проверке и по ожидаемой причине, а не ошибкой импорта или опечаткой. Упал не так — чини тест.
3. **Зелёный.** Минимальный код, после которого тест проходит.
4. **Весь набор проекта зелёный** — не один свой файл.
5. **Рефакторинг** — только при зелёных тестах.
**Баг** — первым делом тест, который воспроизводит его и падает на текущем коде. Исправление без такого теста не принимается.
**Код уже написан до теста** — не удаляй. Напиши тест, затем сломай проверяемое поведение (откати исправление): тест обязан покраснеть. Не покраснел — он ничего не проверяет. Верни код.
**Хороший тест** проверяет поведение, а не текст файла; настоящий код, а не мок; ожидаемое значение не вычисляется тем же кодом.
**В отчёте** — команда и вывод красного прогона и итог зелёного прогона всего набора.
**Оправдания, которые не отменяют красный тест:**
| Мысль | Как на деле |
|---|---|
| «Срочно, нет времени» | Красный тест — минута. Неудачная правка без теста стоит отката и второго захода |
| «Правка в одну строку, тут нечего проверять» | Однострочный баг и возвращается одной строкой — тест держит его навсегда |
| «Пользователь сказал без формальностей» | Это про длину ответа, а не про отказ от теста. Пропустить тест можно только по явной просьбе «без тестов» |
Полный текст: `${CLAUDE_PLUGIN_ROOT}/checklists/test-first.md`
Если методология установлена копированием — файл лежит в `checklists/test-first.md` репозитория.