Files

3.8 KiB
Raw Permalink Blame History

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
audience workflow
tester-backend-coder-frontend-coder tdd-bdd-e2e

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-Tests
  • frontend/src/**/__tests__/ oder frontend/src/**/*.test.{ts,tsx,js,jsx} prüfen
  • Tester-Agent-Konventionen aus .opencode/agents/tester.md beachten

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:

  • WebTestCase fü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 test Environment 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 mandantId korrekt 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\deeptrace aufrufen 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 pwd vor 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 )