Тестирование
Пирамида тестирования, фреймворки (Vitest, Playwright, bats), правила моков, Live Smoke-Test Gate для raw SQL. Для написания и ревью тестов.
Обзор
Testing — справочный навык, загружаемый разработчиками и ревьюерами при написании или проверке тестов. Определяет пирамиду тестирования, рекомендуемые фреймворки по уровням и строгие правила мокирования, которые предотвращают хрупкие или вводящие в заблуждение тесты.
Пирамида тестирования
- Юнит-тесты (70%) — тестируют отдельные функции и классы в изоляции. Мокают все внешние зависимости. Основа тестирования с самым быстрым циклом обратной связи.
- Интеграционные тесты (20%) — тестируют взаимодействие между модулями, сервисами и базами данных. Проверяют совместную работу компонентов.
- E2E-тесты (10%) — тестируют критические пользовательские сценарии целиком. Самые дорогие в написании и поддержке — фокус на самых ценных путях.
Рекомендуемые фреймворки
- Бэкенд — Jest, Mocha или Vitest
- Фронтенд — Vitest с React Testing Library для компонентных тестов
- E2E — Playwright (предпочтительно) или Cypress
Правила мокирования
- Мокайте внешние API (Stripe, AWS, сторонние сервисы) — никогда не обращайтесь к реальным сервисам в тестах
- Мокайте БД в юнит-тестах — реальные базы только в интеграционных
- Используйте dependency injection для явного мокирования
- Никогда не мокайте то, что на самом деле тестируете — если класс багов живёт в реальной интеграции (не тот клиент, схема или диалект), мок-тест пройдёт, а прод упадёт
- Adapter-path fixture — спека маппера прогоняет сырую строку БД через настоящий маппер, а не собранный вручную выходной объект
- Для точных доказательств авторизации, исполнения, ревизии или потребления проверяйте прямое равенство доказательства и добавляйте контроли с отсутствующим/неверным доказательством через реальный раннер
Продвинутые шлюзы тестирования
- Live Smoke-Test Gate — обязателен для raw SQL, кросс-datasource кода, миграций, queue/webhook. Моки не ловят запросы к неправильному клиенту, которые компилируются, но бьют не в ту БД. Запустите запрос на реальном datasource и запишите результат.
- Live Docker Smoke Test — обязателен для кросс-контейнерных HTTP/RPC вызовов, volume-mounted конфигов, путей файловой системы. 241 юнит-тест может пройти, пока 3 рантайм-бага прячутся в exec-битах, хостнеймах и SSL-конфиге.
- Обнаружение тихих сбоев — для подпроцессов с exit 0 при ошибке (LLM CLI, облачные инструменты). Парсите структурированный вывод вместо проверки exit-кода.
- Spec-Lint тесты — regex-проверки markdown-контрактов в
commands/*.md. Защита от тихой регрессии спецификаций команд. - Тестирование shell-скриптов (bats-core) — красно-зелёная дисциплина для bash-скриптов. Изоляция через
BATS_TEST_TMPDIR+ редирект HOME. Fixture-builder, SUCCESS-marker, guard-тесты для деструктивных флагов. - Post-Deploy Smoke Gate — при смене пользователя деплоя прогоните полный цикл от имени нового пользователя до переключения cron/systemd.
- Верность пути поставки — smoke-доказательства упаковки, установки, обновления и отката должны быть получены на реальном пути поставки.
- TDD-дисциплина — RED-GREEN-REFACTOR с падающим тестом до production-кода, в отдельном фрагменте.
- Разбор унаследованных падений — три корзины для доставшегося красного набора: удалить устаревшее, починить, переформулировать.
- Паттерны конкурентности — fan-out по провайдерам и захват/освобождение общих ресурсов; исправления владения ресурсом сопровождаются регрессиями безопасности и тестами прогресса владельца.
Входной навык направляет к одному вспомогательному фрагменту на подзадачу (live-smoke-gates.md, silent-failure-detection.md, bats-and-spec-lint.md, tdd-discipline.md, triaging-legacy-failures.md, concurrency-patterns.md), чтобы агент загружал только нужный гейт.
Когда используется
Загружается при /dr-do (TDD-цикл: тест, реализация, рефакторинг) и при /dr-qa (ревью покрытия и качества тестов). Справочный навык без привязки к модели.