E2E Test Isolation
E2E-Tests sind per Definition Integrationstests. Vollständige Isolation macht sie wertlos. Aber ohne jede Isolation werden sie zum Chaos-Faktor.
Das Spannungsfeld
Abschnitt betitelt „Das Spannungsfeld“Zu viel Isolation (Mocks): Man testet nur den Mock, nicht das System. Wenn sich das Backend ändert, bemerken die Tests das nicht.
Zu wenig Isolation (Shared State): Tests beeinflussen sich gegenseitig. Reihenfolge-Abhängigkeiten. Flaky Tests durch parallele Ausführung.
Die Lösung: Test-Fixtures auf Datenbankebene
Abschnitt betitelt „Die Lösung: Test-Fixtures auf Datenbankebene“Jeder E2E-Test-Lauf bekommt eine saubere Datenbankinstanz (oder einen isolierten Datenbankzustand) und initialisiert die nötigen Fixtures.
// playwright test fixturetest.beforeEach(async ({ page, apiClient }) => { await apiClient.resetTestData(); await apiClient.createFixture({ user: { email: 'test@example.com', role: 'admin' }, tasks: [{ title: 'Test Task', status: 'open' }], });});Preview-Umgebungen als Test-Target
Abschnitt betitelt „Preview-Umgebungen als Test-Target“In Taskly laufen E2E-Tests gegen Preview-Umgebungen — nicht gegen lokale Setups oder Mocks. Das bedeutet:
- Echter Auth-Flow (Keycloak)
- Echte API (NestJS)
- Echtes Message-Passing (RabbitMQ)
Flakiness kontrollieren
Abschnitt betitelt „Flakiness kontrollieren“- Deterministische Waits:
page.waitForSelector()stattsetTimeout() - Retry-Logik:
test.retry(2)für instabile Netzwerk-abhängige Tests - Parallele Ausführung mit Worker-Isolation: Playwright-Worker bekommen eigene Fixtures