Перейти к основному содержанию

title: Тестирование description: “Модульные тесты, сквозные тесты и вспомогательные инструменты тестирования” icon: flask-vial

failproofai содержит два набора тестов: модульные тесты (быстрые, с мокированием) и сквозные тесты (реальные вызовы подпроцесса).

Запуск тестов


Модульные тесты

Модульные тесты находятся в __tests__/ и используют Vitest с jsdom.

Написание модульного теста политики


Сквозные тесты

Сквозные тесты вызывают реальный бинарный файл failproofai как подпроцесс, передают JSON-полезную нагрузку в stdin и проверяют выходные данные stdout и код выхода. Это тестирует полный путь интеграции, который использует Claude Code.

Настройка

Сквозные тесты запускают бинарный файл прямо из исходного кода репозитория. Перед первым запуском соберите CJS-пакет, который файлы пользовательских хуков используют при импорте из 'failproofai':
Затем запустите тесты:
Пересоберите dist/ всякий раз, когда вы изменяете публичный API хука (src/hooks/custom-hooks-registry.ts, src/hooks/policy-helpers.ts или src/hooks/policy-types.ts).

Структура сквозного теста

Использование вспомогательных инструментов E2E

FixtureEnv - изолированная среда для каждого теста:
createFixtureEnv() автоматически регистрирует очистку afterEach. runHook - вызвать бинарный файл:
Payloads - готовые заводы полезных нагрузок:

Написание сквозного теста

Форматы ответов E2E

Конфигурация Vitest

Сквозные тесты используют vitest.config.e2e.mts с:
  • environment: "node" - браузерные глобальные переменные не требуются
  • pool: "forks" - истинная изоляция процессов (тесты запускают подпроцессы)
  • testTimeout: 20_000 - 20s на тест (запуск бинарного файла + оценка хука)
Пул forks важен: рабочие процессы на основе потоков делят globalThis, что может мешать тестам, запускающим подпроцессы. Форки на основе процессов избегают этого.

CI

Полный запуск CI (bun run lint && bunx tsc --noEmit && bun run test:run && bun run build) должен пройти успешно перед объединением. Набор E2E тестов работает как отдельная задача CI параллельно. См. Contributing для полного списка проверок перед объединением.