Skip to content

test: zwei bekannte Flakes entschärfen - #76

Merged
pseidler89-sudo merged 1 commit into
mainfrom
fix/flaky-tests
Aug 6, 2026
Merged

test: zwei bekannte Flakes entschärfen#76
pseidler89-sudo merged 1 commit into
mainfrom
fix/flaky-tests

Conversation

@pseidler89-sudo

Copy link
Copy Markdown
Owner

Räumt die beiden „kleineren offenen Punkte" aus docs/STATUS.md ab.

1. Kollisionstests prüften die falsche Zusage

booking.test.ts:63 und beleg.test.ts:62 erwarteten toBe(5000) — also null Kollisionen über 5000 Ziehungen.

Das ist aus zwei Gründen falsch:

  • Der Generator garantiert die Eindeutigkeit gar nicht. Dafür sorgen UNIQUE + Retry in booking-core.ts:196 (fünf Versuche mit onConflictDoNothing auf den Code-Constraint). Der Test prüfte einen Vertrag, den die getestete Funktion nie versprochen hat.
  • Er war flaky. Bei 40 Bit Entropie liegt die Kollisionswahrscheinlichkeit über 5000 Ziehungen bei rund 1:88.000 pro Lauf (Geburtstagsproblem) — im Schnitt alle 88.000 Läufe grundlos rot.

Jetzt toBeGreaterThanOrEqual(4995): lässt einzelne Kollisionen zu, schlägt aber weiterhin an, wenn die Streuung wirklich zusammenbricht. Der Produktivcode bleibt unverändert — er war in Ordnung.

2. hookTimeout global auf 60 s

email-change.test.ts lief sporadisch in einen beforeAll-Timeout, einzeln aber grün. Der Hook wirft das Schema weg und fährt die gesamte Migrationskette neu hoch — die Dauer wächst mit jeder Migration, der Standard-Timeout von 10 s aber nicht. Mit Migration 0039 kommt die nächste dazu.

Gesetzt wird das zentral in vitest.config.ts, nicht in der einen Datei: Jede Integrationstest-Datei mit Schema-Reset hat dieselbe Exposition.

Warum das kein Kosmetikpunkt ist

Beide Fälle sind dieselbe Sorge: Ein roter Lauf ohne echten Fehler wird beim nächsten Mal weggeklickt — und dann fällt ein echter Fehler auch nicht mehr auf. Das ist in diesem Repo schon einmal passiert (falsches CI-Rot am 27.07.).

Geprüft

booking.test.ts, beleg.test.ts und email-change.test.ts zusammen: 39 Tests grün.

🤖 Generated with Claude Code

https://claude.ai/code/session_018YNj1kkesDywuEGvNweBHM

1) Kollisionstests (booking/beleg): toBe(5000) prueft die falsche Zusage. Die
   Eindeutigkeit garantiert nicht der Generator, sondern UNIQUE + Retry in
   booking-core.ts. Bei 40 Bit Entropie liegt die Kollisionswahrscheinlichkeit
   ueber 5000 Ziehungen bei rund 1:88.000 pro Lauf — der Test waere im Schnitt
   alle 88.000 Laeufe grundlos rot geworden. Jetzt >= 4995: laesst einzelne
   Kollisionen zu, schlaegt aber an, wenn die Streuung zusammenbricht.

2) hookTimeout global auf 60 s. Die beforeAll-Hooks der Integrationstests
   werfen das Schema weg und fahren die ganze Migrationskette hoch; deren Dauer
   waechst mit jeder Migration, der Standard-Timeout nicht. email-change.test.ts
   lief deshalb sporadisch in einen Timeout, einzeln aber gruen.

Beides ist dieselbe Sorge: Ein roter Lauf ohne echten Fehler wird beim naechsten
Mal weggeklickt — und dann faellt ein echter Fehler auch nicht mehr auf.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018YNj1kkesDywuEGvNweBHM
@pseidler89-sudo
pseidler89-sudo merged commit c295338 into main Aug 6, 2026
6 checks passed
@pseidler89-sudo
pseidler89-sudo deleted the fix/flaky-tests branch August 6, 2026 14:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant