Skip to content
NeuralSkills
Testen

Flaky-Test-Reparatur

Instabile Tests diagnostizieren und reparieren — Race Conditions, Timing-Probleme, Test-Kontamination und Umgebungsabhaengigkeiten.

Fortgeschritten Kostenlos Veroeffentlicht: 15. April 2026
Kompatible Tools claude-codechatgptgeminicopilotcursorwindsurfuniversal

Das Problem

Instabile Tests sind der Krebs von CI-Pipelines. Sie bestehen lokal aber scheitern in CI, bestehen beim Retry aber scheitern zufaellig, oder scheitern nur zusammen mit bestimmten anderen Tests. Die Grundursachen — gemeinsamer veraenderbarer Zustand, Timing-Abhaengigkeiten, unkontrollierte Zufallswerte — sind konsistente Muster, die systematisch diagnostiziert und behoben werden koennen.

Der Prompt

Diagnostiziere und behebe den folgenden instabilen Test. Er besteht meistens, scheitert aber intermittierend, besonders in CI.

INSTABILER TEST:
[den fehlschlagenden Test einfuegen]

FEHLERAUSGABE (wenn er scheitert):
[die Fehlerausgabe einfuegen]

CI-UMGEBUNG: [z.B. GitHub Actions Ubuntu, Jenkins Docker]

Auf diese Instabilitaetsmuster analysieren:

1. **Timing/Async-Probleme** — fehlende awaits, Race Conditions, setTimeout-Abhaengigkeiten
2. **Gemeinsamer Zustand** — Tests haengen von Reihenfolge ab, gemeinsamer Zustand nicht zurueckgesetzt
3. **Externe Abhaengigkeiten** — Netzwerkaufrufe, Dateisystem, Systemuhr, Zufallszahlen
4. **Ressourcenkonflikte** — Port-Konflikte, Dateisperren, Verbindungspool-Erschoepfung
5. **Umgebungsunterschiede** — CI hat andere Zeitzone, Locale, Aufloesung, Speicherlimits

Fuer jede vermutete Ursache: erklaeren WARUM, den EXAKTEN Fix zeigen, defensive Assertion hinzufuegen.

Beispielausgabe

// PROBLEM: Test haengt von setTimeout-Reihenfolge ab
// VORHER:
it('zeigt Benachrichtigung nach Speichern', () => {
  clickSave();
  expect(screen.getByText('Gespeichert!')).toBeVisible(); // INSTABIL
});

// FIX: Auf spezifische UI-Aenderung warten
it('zeigt Benachrichtigung nach Speichern', async () => {
  clickSave();
  await waitFor(() => {
    expect(screen.getByText('Gespeichert!')).toBeVisible();
  }, { timeout: 3000 });
});

Wann verwenden

Bei jedem intermittierend scheiternden Test in CI, wenn das Team “bekannt instabile” Tests hat, die uebersprungen werden, oder bei Retry-bis-gruen-Mustern in der Pipeline.

Profi-Tipps

  • Tests in zufaelliger Reihenfolge ausfuehren--randomize nutzen, um reihenfolgeabhaengige Tests lokal aufzudecken.
  • Quarantaene, dann beheben — instabile Tests in eine separate Suite verschieben, aber eine Frist setzen.
  • Timing-Logs hinzufuegen — KI bitten, den Test mit Zeitstempeln bei jedem Schritt zu instrumentieren.
  • Lokal in Docker testen — Tests im gleichen Docker-Image wie CI ausfuehren.