Skip to main content
failproofai имеет два набора тестов: модульные тесты (быстрые, с моками) и end-to-end тесты (реальные вызовы подпроцессов).

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


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

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

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


End-to-end тесты

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

Настройка

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

Структура E2E теста

Использование E2E помощников

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

Написание E2E теста

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

Конфиг Vitest

E2E тесты используют 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 для полного предварительного списка проверок перед слиянием.