3.8 KiB
3.8 KiB
name, description, license, compatibility, metadata
| name | description | license | compatibility | metadata | ||||
|---|---|---|---|---|---|---|---|---|
| testing | Write und ausführen von Tests für Symfony Backend (PHPUnit) und React Frontend (Jest/Vitest inkl. E2E). Deckt Unit, Functional, Integration und E2E ab – inklusive Mandantenisolation und OAuth-Flows. | MIT | opencode |
|
Was ich mache
- Tests schreiben, ausführen und debuggen für das gesamte Projekt
- Test-Pyramide anwenden: Unit > Functional > Integration > E2E
- Mandantenisolation in jedem relevanten Test explizit prüfen
- OAuth-Vflows mocken und testen
- Code-Coverage messen und Lücken identifizieren
Wann du mich nutzen solltest
- Neue Features implementiert wurden und abgedeckt werden müssen
- Tests fehlen oder veraltet sind
- Coverage-Analyse nötig ist
- CI/CD-Pipeline Tests validiert werden sollen
Workflow
1. Projektstruktur prüfen
pwd # aktuellen Pfad verifizieren
ls api/phpunit.xml* api/composer.json # Symfony Test-Setup prüfen
ls frontend/package.json # Frontend Test-Setup prüfen
2. Bestehende Tests verstehen
api/tests/durchsuchen für现有 Controller/Service-Testsfrontend/src/**/__tests__/oderfrontend/src/**/*.test.{ts,tsx,js,jsx}prüfen- Tester-Agent-Konventionen aus
.opencode/agents/tester.mdbeachten
3. Tests schreiben (Symfony PHPUnit)
// api/tests/Unit/Entity/PersonTest.php
// api/tests/Functional/Controller/Api/VeranstaltungControllerTest.php
// api/tests/Integration/MandantIsolationTest.php
Wichtige Konventionen:
WebTestCasefür Functional Tests mit/api/*Routen- Mandanten-Scope in jedem Request via Header oder Session setzen
- OAuth-Token mocken (kein echter Vonova-Flow in unit tests)
- Datenbank über
testEnvironment und SQLite/In-Memory oder dedizierte Test-Datenbank
4. Tests schreiben (Frontend)
# Jest oder Vitest – je nachdem was konfiguriert ist
npm test --prefix frontend
# bzw.
cd frontend && npm test
Wichtige Konventionen:
- Komponenten isoliert testen (React Testing Library bevorzugt)
- API-Calls mocken (MSW, axios-mock-adapter, etc.)
- State-Management (Redux/Zustand/etc.) separat testen
- E2E über Playwright/Cypress falls vorhanden
5. Mandantenisolation prüfen
Jeder Test der Daten betrifft muss validieren:
- Person A aus Mandant 1 sieht NICHT Daten von Mandant 2
- API-Filters
mandantIdkorrekt scopen - Repository-Traits/QueryBuilders filtern automatisch
6. Tests ausführen und Coverage prüfen
# Backend
cd api && php bin/phpunit --coverage-text --testsuite=Unit
cd api && php bin/phpunit --testsuite=functional
# Frontend
cd frontend && npm test -- --coverage
# E2E (falls konfiguriert)
cd frontend && npx playwright test
# oder
cd frontend && npx cypress run
7. DeepTrace analysieren (falls Testfehler auftreten)
Wenn Tests fehlschlagen oder unerwartetes Verhalten zeigen:
\\opencode\deeptraceaufrufen um die vollständige Ausführungskette zu inspecten- Stacktrace, Umgebungsvariablen, und abhängige Aufrufe prüfen
- Besonders nützlich bei:
- Mandantenisolation-Verletzungen (wer hat welche Daten gesehen?)
- OAuth-Token-Problemen (welcher Mock wurde nicht geladen?)
- Datenbank-State-Korruption in Integrationstests
8. Coverage-Ziel
- Kritische Pfade > 80%: Anwesenheitsprotokollierung, Mandantenisolation, OAuth-Flows
- Lücken dokumentieren und als TODOs erfassen
Regeln
- Immer
pwdvor Dateioperationen prüfen - Test-Namen klar und deskriptiv:
testPersonCreationScopesToMandant() - Jeder Test testet genau eine Verhalten/Anforderung
- Arrange → Act → Assert Pattern durchhalten
- Keine echten externen Calls – alles mocken (Vonova OAuth, externe APIs)
- Test-Daten sauber aufräumen ( tearDown / fixtures )