Ejecutar pruebas
Pruebas unitarias
Las pruebas unitarias se encuentran en__tests__/ y utilizan Vitest con happy-dom.
Cómo escribir una prueba unitaria de política
Pruebas end-to-end
Las pruebas E2E invocan el binario real defailproofai como subproceso, envían un payload JSON a stdin y verifican la salida por stdout y el código de salida. Esto prueba la ruta de integración completa que utiliza Claude Code.
Configuración
Las pruebas E2E ejecutan el binario directamente desde el código fuente del repositorio. Antes de la primera ejecución, compila el bundle CJS que utilizan los archivos de hooks personalizados cuando importan desde'failproofai':
dist/ cada vez que modifiques la API pública de hooks (src/hooks/custom-hooks-registry.ts, src/hooks/policy-helpers.ts o src/hooks/policy-types.ts).
Estructura de las pruebas E2E
Uso de las utilidades E2E
FixtureEnv — entorno aislado por prueba:
createFixtureEnv() registra la limpieza con afterEach automáticamente.
runHook — invoca el binario:
Payloads — fábricas de payloads predefinidas:
Cómo escribir una prueba E2E
Formatos de respuesta E2E
| Decisión | Código de salida | stdout |
|---|---|---|
PreToolUse deny | 0 | {"hookSpecificOutput":{"permissionDecision":"deny","permissionDecisionReason":"..."}} |
PostToolUse deny | 0 | {"hookSpecificOutput":{"additionalContext":"Blocked ... because: ..."}} |
| Instruct (sin Stop) | 0 | {"hookSpecificOutput":{"additionalContext":"Instruction from failproofai: ..."}} |
| Stop instruct | 2 | stdout vacío; motivo en stderr |
| Allow | 0 | cadena vacía |
Configuración de Vitest
Las pruebas E2E utilizanvitest.config.e2e.mts con:
environment: "node"— no se necesitan globales del navegadorpool: "forks"— aislamiento real de procesos (las pruebas lanzan subprocesos)testTimeout: 20_000— 20 s por prueba (inicio del binario + evaluación del hook)
forks es importante: los workers basados en hilos comparten globalThis, lo que puede interferir con pruebas que lanzan subprocesos. Los forks basados en procesos evitan este problema.
CI
La ejecución completa de CI (bun run lint && bunx tsc --noEmit && bun run test:run && bun run build) debe pasar antes de hacer merge. La suite E2E se ejecuta como un job de CI independiente en paralelo.
Consulta Contributing para ver la lista de verificación completa previa al merge.
