Skip to content

Ordnerstruktur

Der Ordner tests enthält alle Tests für die Anwendung. Die Ordnerstruktur ist wie folgt:

plaintext
tests/
├── Browser/          # Browser-Tests (Dusk/Cypress)
├── Datasets/         # Wiederverwendbare Pest Datasets
│   ├── users.php
│   ├── vocab.php
│   └── uebungen.php
├── Development/      # Experimentelle Tests (nicht in CI/CD)
├── Feature/          # Pest Feature-Tests (Hauptanwendung)
├── Legacy/           # Alte PHPUnit-Tests (deaktiviert)
├── Support/          # Test-Infrastruktur
│   ├── WithDatabaseTransactions.php
│   └── CreatesApplication.php
├── TestRepositories/ # Repository-Klassen für Tests
├── TestTraits/       # Traits für Tests (deprecated)
├── Unit/             # Pest Unit-Tests
├── utilities/        # Legacy-Utilities (deprecated)
├── Pest.php          # Zentrale Pest-Konfiguration
└── TestCase.php      # Basis-TestCase

Hauptverzeichnisse

Browser/

Browser-Tests mit Laravel Dusk und Cypress.

Status: Teilweise deprecated, manuell ausführen.

Ausführung:

bash
php artisan dusk
npm run cypress

Datasets/

Wiederverwendbare Pest Datasets für parametrisierte Tests.

Dateien:

  • users.php - User-Rollen und Base-Data
  • vocab.php - Vokabel- und Morphologie-Datasets
  • uebungen.php - Übungs-Module-Datasets

Verwendung:

php
test('test', function (string $role) {
    // ...
})->with('roles');

Siehe Datasets-Dokumentation.

Development/

Experimentelle Tests für Feature-Entwicklung und Debugging.

Status: Ausgeschlossen aus Test-Suite (siehe tests/Development/README.md)

Verwendung:

  • Prototyping neuer Features
  • Debugging von Bugs
  • Temporäre Tests

Hinweis: Tests hier werden NICHT in CI/CD ausgeführt.

Feature/

Pest Feature-Tests für die Hauptanwendung.

Status: Produktive Tests, laufend aktualisiert.

Automatisch aktiviert:

  • DatabaseTransactions (automatisches Rollback)
  • TestCase-Basis

Struktur:

plaintext
Feature/
├── Auth/
│   ├── LoginTest.php
│   └── RegistrationTest.php
├── Glossarium/
│   └── VocabCrudTest.php
└── Uebungen/
    └── UebungCrudTest.php

Legacy/

Alte PHPUnit-Tests, die noch nicht migriert wurden.

Status: Deaktiviert (siehe tests/Legacy/README.md)

Ausgeschlossen von:

  • Test-Suite Ausführung
  • CI/CD-Pipeline

Verwendung:

  • Als Referenz für Migration
  • Manuell ausführbar: php artisan test tests/Legacy/SpecificTest.php

Migration: Siehe Testing Leitlinien - Migration

Support/

Test-Infrastruktur und Helper-Klassen.

Wichtige Dateien:

  • WithDatabaseTransactions.php - Trait für automatisches Rollback
  • CreatesApplication.php - Laravel Application Bootstrap

Verwendung:

php
use Tests\Support\WithDatabaseTransactions;

uses(WithDatabaseTransactions::class);

Unit/

Pest Unit-Tests für isolierte Komponenten.

Status: Aktiv, aber weniger umfangreich als Feature-Tests.

Keine automatischen DatabaseTransactions!

TestRepositories/ & TestTraits/

Alte Test-Helper-Strukturen.

Status: Größtenteils deprecated.

Modern: Nutze stattdessen:

  • Datasets (tests/Datasets/)
  • Helper-Funktionen (tests/Pest.php)
  • Custom Expectations (tests/Pest.php)

utilities/

Legacy-Utilities und alte Test-Helfer.

Status: Deprecated, nicht verwenden.

Konfigurationsdateien

Pest.php

Zentrale Pest-Konfiguration.

Definiert:

  • Test-Scopes (uses()->in())
  • Helper-Funktionen (Authentifizierung, Übungen)
  • Custom Expectations
  • Base-Data User Mapping

Siehe Pest-Konfiguration.

TestCase.php

Basis-TestCase für alle Tests.

Features:

  • Exception Handling (deaktiviert für bessere Fehlerausgabe)
  • URL-Konfiguration
  • Foreign Key Constraints
  • Cache-Clearing

Modul-Tests

Module haben eigene Test-Verzeichnisse:

plaintext
modules/
└── [Kategorie]/
    └── [Modulname]/
        └── tests/
            ├── Feature/
            │   └── ModuleFeatureTest.php
            └── Unit/
                └── ModuleUnitTest.php

Beispiel:

plaintext
modules/Uebungen/UebungBedeutungenZuordnen/tests/
├── Feature/
│   └── BedeutungenZuordnenAPITest.php
└── Unit/
    └── BedeutungenZuordnenModelTest.php

Ausführung:

bash
# Alle Modul-Tests
php artisan test --testsuite=Modules

# Einzelnes Modul
php artisan test modules/Uebungen/UebungBedeutungenZuordnen/tests/

README-Dateien

Wichtige README-Dateien in Test-Verzeichnissen:

PfadBeschreibung
tests/Legacy/README.mdWarum Legacy-Tests deaktiviert sind
tests/Development/README.mdVerwendung von Development-Tests

Best Practices

Verzeichniswahl

Feature-Test (Hauptanwendung):

tests/Feature/[DomainArea]/[Feature]Test.php

Unit-Test (Hauptanwendung):

tests/Unit/[Component]/[Component]Test.php

Modul-Feature-Test:

modules/[Kategorie]/[Modulname]/tests/Feature/[Feature]Test.php

Experimenteller Test:

tests/Development/[IssueNumber oder FeatureName]/ExperimentTest.php

Naming Conventions

Test-Dateien:

  • Suffix: Test.php
  • PascalCase: VocabCrudTest.php

Test-Funktionen:

  • Kleinbuchstaben mit Leerzeichen
  • Beschreibend: test('admin kann vokabel erstellen', ...)

Dataset-Dateien:

  • snake_case
  • Plural: users.php, uebungen.php

Migration

Von Legacy zu Feature

  1. Test in tests/Feature/ verschieben
  2. Syntax auf Pest umstellen
  3. uses(WithDatabaseTransactions::class) hinzufügen
  4. Factory-User durch Base-Data User ersetzen
  5. Custom Expectations nutzen

Siehe Testing Leitlinien - Migration.

Von TestRepositories zu Datasets

php
// ALT: TestRepository
$users = TestUserRepository::getUsers();

// NEU: Dataset
test('test', fn($role) => /* ... */)->with('roles');

Weitere Ressourcen