Testing
Test-Pyramide
Section titled “Test-Pyramide”| Ebene | Werkzeug | Scope |
|---|---|---|
| Unit-Tests | Jest | Geschäftslogik pro Modul — isoliert, InMemory-Repositories |
| Integration-Tests | Jest + Supertest | Cross-Modul-Workflows über den Route/API-Layer |
| E2E-Tests | Playwright | API-, Web- und Mobile-Flows über echtes Netzwerk/Browser |
| Smoke-Tests | Jest | Root-Export-Verifikation, Health-Checks |
| Security-Tests | Semgrep, Gitleaks, Trivy | SAST, Secret-Scan, Dependency-Scan in CI |
| Mutation-Tests | StrykerJS | Kritische Module — Ziel: >= 80 % Mutation-Score |
Lokale Test-Pipeline
Section titled “Lokale Test-Pipeline”Empfohlene Reihenfolge — jede Stufe läuft nur, wenn die vorherige erfolgreich war:
npx tsc --noEmit --project api/tsconfig.jsonpnpm lintpnpm testpnpm buildTest-Konventionen
Section titled “Test-Konventionen”- Keine PII in Test-Daten: synthetische UUIDs
(
00000000-0000-4000-8000-*) undexample.com-Adressen verwenden. setup()-Funktion kapselt das Test-Wiring (DRY) — keinbeforeEachmit geteiltem State.- Error-Tests spezifisch:
rejects.toThrow(SpecificErrorClass)statt generischemtoThrow(). - Tenant-Isolation mitverifizieren: jeder Service-Test enthält einen
Cross-Tenant-Fall, der
NOT_FOUNDerwartet. - Kein
anyin Tests für typisierte Interfaces (Mocks ausgenommen).
CI-Pipeline
Section titled “CI-Pipeline”Die vollständige Pipeline (Typecheck, Lint, Tests, Build, Security-Scans, E2E) läuft automatisch in der CI. Mutation-Tests laufen wöchentlich als eigener Gate-Job mit definierten Score-Schwellen pro Modul.
