5.2 KiB
5.2 KiB
Test Suite - Dienstplan Bonusrechner
Automatische Test Suite für die Web-App.
Schnellstart
-
Server starten (falls noch nicht gestartet):
cd webapp python3 -m http.server 8000 -
Test-Seite öffnen:
http://localhost:8000/test.html -
Tests ausführen:
- Klicken Sie auf "Alle Tests ausführen"
- Warten Sie auf die Ergebnisse
- ✅ = Test bestanden
- ❌ = Test fehlgeschlagen
Was wird getestet?
1. Holiday Provider (NRW-Feiertage)
- ✅ Feiertage werden korrekt erkannt
- ✅ Normale Tage werden nicht als Feiertage erkannt
- ✅ Tag vor Feiertag wird erkannt
- ✅ Spezifische Feiertage (Fronleichnam, etc.)
2. Calculator - Tag-Klassifizierung
- ✅ Freitag ist qualifizierend
- ✅ Samstag ist qualifizierend
- ✅ Sonntag ist qualifizierend
- ✅ Normale Wochentage (Mo-Do) sind nicht qualifizierend
- ✅ Feiertage sind qualifizierend
- ✅ Tag vor Feiertag ist qualifizierend
3. Calculator - Bonusberechnung
Schwellenwert-Tests:
- ✅ Unter Schwellenwert (1.0 WE-Tag) → 0€
- ✅ Genau Schwellenwert (2.0 WE-Tage) → 0€
- ✅ Über Schwellenwert (3.0 WE-Tage) → 450€
Gemischte Dienste:
- ✅ Normale Tage + WE-Tage korrekt berechnet
- ✅ Halbe Dienste korrekt berechnet
- ✅ Feiertag + Vortag-Kombination
Spezialfälle:
- ✅ Keine Dienste → 0€
- ✅ 2x halbe Samstage zählen als 1 ganzer Tag
4. Storage (Datenverwaltung)
- ✅ Mitarbeiter hinzufügen
- ✅ Doppelte Mitarbeiter werden abgelehnt
- ✅ Mitarbeiter entfernen
- ✅ Dienste hinzufügen und abrufen
- ✅ Dienste aktualisieren (gleicher Tag)
- ✅ Mehrere Mitarbeiter verwalten
- ✅ Export und Import von Daten
5. Edge Cases
- ✅ Rundungsfehler bei Schwellenwert
- ✅ Performance bei vielen Diensten (30+ Tage)
- ✅ Schaltjahre (29. Februar)
Test-Statistiken
Nach dem Durchlauf sehen Sie:
- Gesamt: Anzahl aller Tests
- Bestanden: Anzahl erfolgreicher Tests
- Fehlgeschlagen: Anzahl fehlgeschlagener Tests
Testfälle im Detail
Beispiel 1: Schwellenwert genau erreicht
Dienste:
- 1× Samstag (1.0)
- 1× Sonntag (1.0)
Erwartung:
- Qualifizierende Tage: 2.0
- Schwellenwert: ✅ Erreicht
- Abzug: -1.0
- Bezahlt: 1.0 × 450€ = 450€
Beispiel 2: Gemischte Dienste
Dienste:
- 2× Montag (2.0 normale Tage)
- 2× Samstag (2.0 qualifizierende Tage)
Erwartung:
- Normale Tage: 2.0 × 250€ = 500€
- Qualifizierende Tage: (2.0 - 1.0) × 450€ = 450€
- Gesamt: 950€
Beispiel 3: Halbe Dienste
Dienste:
- 1× Montag halber Dienst (0.5)
- 1× Samstag halber Dienst (0.5)
- 1× Sonntag ganzer Dienst (1.0)
- 1× Freitag ganzer Dienst (1.0)
Erwartung:
- Normale Tage: 0.5 × 250€ = 125€
- Qualifizierende Tage: (2.5 - 1.0) × 450€ = 675€
- Gesamt: 800€
Tests erweitern
Um einen neuen Test hinzuzufügen, bearbeiten Sie test-suite.js:
runner.test('Testname', (t) => {
// Setup
const calculator = new BonusCalculator(new HolidayProvider());
const duties = [
{ date: new Date('2025-11-22T12:00:00'), share: 1.0 }
];
// Ausführung
const result = calculator.calculateMonthlyBonus(duties);
// Assertions
t.assertEqual(result.totalBonus, 0, 'Erwarteter Bonus');
t.assertTrue(result.thresholdReached, 'Schwelle erreicht');
});
Verfügbare Assertions
assertEqual(actual, expected, message)- Exakte GleichheitassertAlmostEqual(actual, expected, tolerance, message)- Ungefähre Gleichheit (für Fließkommazahlen)assertTrue(value, message)- Wert sollte true seinassertFalse(value, message)- Wert sollte false sein
Troubleshooting
Tests schlagen fehl
- Prüfen Sie die Fehlermeldung (wird rot angezeigt)
- Überprüfen Sie die erwarteten vs. erhaltenen Werte
- Testen Sie die Funktion manuell in der Haupt-App
Performance-Probleme
- Die Test Suite sollte in < 1 Sekunde durchlaufen
- Bei Verzögerungen: Browser-Konsole prüfen (F12)
LocalStorage-Konflikte
- Tests verwenden die gleiche LocalStorage-Instanz wie die Haupt-App
- Bei Problemen: LocalStorage im Browser löschen
- Oder: Tests in Inkognito-Modus ausführen
Continuous Integration
Die Tests können auch automatisiert mit Headless-Browsern ausgeführt werden:
# Mit Playwright
npx playwright test
# Mit Puppeteer
node run-tests-headless.js
(Erfordert zusätzliche Setup-Schritte)
Test-Abdeckung
Aktuelle Abdeckung:
- Feiertage: 100% (alle NRW-Feiertage getestet)
- Tag-Klassifizierung: 100% (alle Wochentage + Feiertage)
- Bonusberechnung: ~95% (Hauptszenarien + Edge Cases)
- Storage: ~90% (CRUD-Operationen)
- UI: 0% (keine UI-Tests, nur Logik)
Bekannte Limitierungen
- Keine UI-Tests: Nur Logik-Tests, keine Interaktions-Tests
- Browser-abhängig: LocalStorage-Tests funktionieren nur im Browser
- Keine Netzwerk-Tests: Kein Server-seitiger Code
- Zeitzone: Tests gehen von deutscher Zeitzone aus
Best Practices
- Tests vor Änderungen ausführen: Sicherstellen, dass alles funktioniert
- Nach Änderungen erneut testen: Regression verhindern
- Neue Features = Neue Tests: Test-first development
- Tests dokumentieren: Klare Namen und Kommentare
Lizenz
MIT (wie Hauptprojekt)