Скилл Quality

Тестирование

Пирамида тестирования, фреймворки (Vitest, Playwright, bats), правила моков, Live Smoke-Test Gate для raw SQL. Для написания и ревью тестов.

Обзор

Testing — справочный навык, загружаемый разработчиками и ревьюерами при написании или проверке тестов. Определяет пирамиду тестирования, рекомендуемые фреймворки по уровням и строгие правила мокирования, которые предотвращают хрупкие или вводящие в заблуждение тесты.

Пирамида тестирования

  1. Юнит-тесты (70%) — тестируют отдельные функции и классы в изоляции. Мокают все внешние зависимости. Основа тестирования с самым быстрым циклом обратной связи.
  2. Интеграционные тесты (20%) — тестируют взаимодействие между модулями, сервисами и базами данных. Проверяют совместную работу компонентов.
  3. 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 (ревью покрытия и качества тестов). Справочный навык без привязки к модели.