Tests ausführen
Unit-Tests
Unit-Tests befinden sich in__tests__/ und verwenden Vitest mit happy-dom.
Einen Policy-Unit-Test schreiben
End-to-End-Tests
E2E-Tests rufen die echtefailproofai-Binary als Subprocess auf, leiten einen JSON-Payload über stdin weiter und prüfen die stdout-Ausgabe sowie den Exit-Code. Damit wird der vollständige Integrationspfad getestet, den Claude Code verwendet.
Setup
E2E-Tests führen die Binary direkt aus dem Repository-Quellcode aus. Vor dem ersten Durchlauf muss das CJS-Bundle erstellt werden, das von Custom-Hook-Dateien verwendet wird, wenn sie aus'failproofai' importieren:
dist/ muss neu gebaut werden, wenn Änderungen an der öffentlichen Hook-API vorgenommen werden (src/hooks/custom-hooks-registry.ts, src/hooks/policy-helpers.ts oder src/hooks/policy-types.ts).
E2E-Teststruktur
Die E2E-Hilfsmittel verwenden
FixtureEnv – isolierte Umgebung pro Test:
createFixtureEnv() registriert die afterEach-Bereinigung automatisch.
runHook – Binary aufrufen:
Payloads – vorgefertigte Payload-Factories:
Einen E2E-Test schreiben
E2E-Antwortformate
| Entscheidung | Exit-Code | stdout |
|---|---|---|
PreToolUse deny | 0 | {"hookSpecificOutput":{"permissionDecision":"deny","permissionDecisionReason":"..."}} |
PostToolUse deny | 0 | {"hookSpecificOutput":{"additionalContext":"Blocked ... because: ..."}} |
| Instruct (nicht Stop) | 0 | {"hookSpecificOutput":{"additionalContext":"Instruction from failproofai: ..."}} |
| Stop instruct | 2 | leerer stdout; Grund in stderr |
| Allow | 0 | leerer String |
Vitest-Konfiguration
E2E-Tests verwendenvitest.config.e2e.mts mit:
environment: "node"– keine Browser-Globals erforderlichpool: "forks"– echte Prozessisolierung (Tests starten Subprocesse)testTimeout: 20_000– 20 Sekunden pro Test (Binary-Start + Hook-Auswertung)
forks-Pool ist wichtig: Thread-basierte Worker teilen sich globalThis, was zu Interferenzen mit Subprocess-startenden Tests führen kann. Prozessbasierte Forks vermeiden dies.
CI
Der vollständige CI-Durchlauf (bun run lint && bunx tsc --noEmit && bun run test:run && bun run build) muss vor dem Mergen erfolgreich abgeschlossen sein. Die E2E-Suite läuft als separater CI-Job parallel dazu.
Siehe Contributing für die vollständige Checkliste vor dem Mergen.
