К основному содержанию
хук

tdd-gate — хук для Claude Code: тесты раньше кода

Хук блокирует правку production-файлов, пока рядом нет теста. Пригодится, если хотите удержать TDD в работе с агентом.

Установить в Claude Code · Через claude-code-templates Все способы и платформы ↓
npx claude-code-templates@latest --hook quality-gates/tdd-gate
Открыть на GitHub

Что делает tdd-gate

tdd-gate — хук на событие PreToolUse, который перехватывает Edit, MultiEdit и Write. Перед записью в файл с расширением .cs, .py, .ts, .go, .rs, .rb, .php, .java, .kt, .swift или .dart скрипт ищет тестовый файл по типовым именам: MyClassTest.ext, my-class.test.ext, my_class_test.ext, test_my_class.ext. Не нашёл — правка не проходит.

Проверка не срабатывает на конфигах, миграциях, DTO, инфраструктурных файлах и самих тестах. То есть хук не мешает править settings.json или схему базы, но упрётся, если вы попробуете дописать метод в сервис без теста. Логика целиком в bash-скрипте tdd-gate.sh, который кладётся в .claude/hooks/ и вызывается через $CLAUDE_PROJECT_DIR.

Установка идёт через npx claude-code-templates@latest --hook quality-gates/tdd-gate, после чего запись хука появляется в .claude/settings.json. Скрипту нужен bash в системе. Автор ссылается на методологию Spec-Driven Development из pm-workspace.

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

  • заставить агента писать тест до реализации
  • поймать правку сервиса без покрытия
  • не пропустить добавление метода в класс без теста
  • удержать порядок «тест, потом код» в новой фиче

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

  • Добавь метод расчёта скидки в OrderService — сначала тест, потом код
  • Напиши тест на этот сценарий и только после этого правь реализацию
  • Почему правка не проходит? Проверь, есть ли тестовый файл для этого модуля

Как установить tdd-gate

1Через claude-code-templates

npx claude-code-templates@latest --hook quality-gates/tdd-gate

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

.claude/settings.json

Блок hooks: событие (PreToolUse, PostToolUse, Stop…) → команда. Личные — ~/.claude/settings.json

По шагам, с командами для каждой платформы: Хуки Claude Code: что это, где настраивать и как запретить опасную команду

Вопросы о tdd-gate

Как установить tdd-gate в Claude?

Выполните npx claude-code-templates@latest --hook quality-gates/tdd-gate. Команда кладёт tdd-gate.sh в .claude/hooks/ и прописывает хук в .claude/settings.json.

Что делает tdd-gate?

Блокирует Edit, MultiEdit и Write для production-файлов, если рядом нет теста с подходящим именем. Конфиги, миграции, DTO и сами тесты пропускаются.

Какие имена тестовых файлов распознаёт хук?

MyClassTest.ext, my-class.test.ext, my_class_test.ext и test_my_class.ext. Если файл назван иначе, правка не пройдёт.

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

tdd-gate.json · MIT
{
  "description": "Test-Driven Development enforcement hook. Blocks editing production code files (.cs, .py, .ts, .go, .rs, .rb, .php, .java, .kt, .swift, .dart) unless a corresponding test file exists. Forces the TDD workflow: write tests first, then implement. Automatically skips config files, migrations, DTOs, test files themselves, and infrastructure files. Looks for test files with common naming patterns (MyClassTest.ext, my-class.test.ext, my_class_test.ext, test_my_class.ext). Inspired by pm-workspace's Spec-Driven Development methodology.",
  "supportingFiles": [
    {
      "source": "tdd-gate.sh",
      "destination": ".claude/hooks/tdd-gate.sh",
      "executable": true
    }
  ],
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit",
        "hooks": [
          {
            "type": "command",
            "command": "bash \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/tdd-gate.sh"
          }
        ]
      },
      {
        "matcher": "MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "bash \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/tdd-gate.sh"
          }
        ]
      },
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "bash \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/tdd-gate.sh"
          }
        ]
      }
    ]
  }
}

© davila7 · MIT · davila7/claude-code-templates

Похожие хуки

Всё по теме «Тесты и QA» →
rtk-tdd rtk-ai Скилл ведёт разработку на Rust по циклу Red-Green-Refactor и сам включается для задач с кодом, тестами, рефакторингом и исправлением ошибок. CX Codex +1 2 100установок tdd-rust rtk-ai Скилл для разработки RTK-фильтров по методу TDD. Пишешь тест на реальных данных, реализуешь минимум кода, проверяешь экономию токенов — и фиксируешь формат вывода снимком через insta. CX Codex +1 1 400установок ship-gate Rajaraman Arumugam Проверяет код перед релизом по безопасности, базе данных, деплою и другим категориям. Останавливает намерение развернуть проект, пока критические проблемы не устранены. 475установок bats-testing-patterns Ryan Snodgrass Скилл помогает писать и запускать тесты shell-скриптов через Bats. Подойдёт для TDD, CI/CD и проверки ошибок в bash, sh и dash. CX Codex 11 000установок django-tdd affaan-m Скилл настраивает TDD-разработку в Django и DRF с помощью pytest-django и factory_boy. Помогает писать тесты для моделей, фикстуры и проверять API. CX Codex +1 4 700установок

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

Весь набор →
setup-development-environment Слэш-команда разворачивает окружение разработки: рантаймы, инструменты, сборку, линтеры и конфиги. Пригодится, когда проект только разворачивают на новой машине. 651установок performance-budget-guard Хук для Claude проверяет размер JS-бандла после сборки Next.js и не даёт выкатить сборку, которая вылезла за бюджет. 393установок vercel-environment-sync Хук проверяет переменные окружения после правки .env и подсказывает, как перенести их в Vercel. Пригодится, если локальные и деплойные значения расходятся. 363установок env-file-protection Хук блокирует вызовы Write к файлам .env*, чтобы агент случайно не перезаписал секреты. Ставится одной командой в настройки Claude. 279установок slack-notifications Отправляет сообщение в Slack, когда Claude закончил работу или завершился субагент. Пригодится, если вы уходите от терминала и хотите знать, что задача готова. 279установок discord-notifications Отправляет сообщение в Discord, когда Claude закончил работу или завершил субагента. Пригодится, если вы уходите от терминала и хотите знать, что задача готова. 217установок debug-window Открывает окно с живым хвостом лога отладки, когда Claude запущен с флагом --debug или -d, и закрывает его по концу сессии. 189установок change-logger Хук пишет каждое изменение файла в CSV: время, инструмент, путь, действие и детали. Пригодится, когда готовишь демо и нужно показать, что именно агент трогал. 163установок

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

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