Ordnerstruktur
Der Ordner tests enthält alle Tests für die Anwendung. Die Ordnerstruktur ist wie folgt:
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-TestCaseHauptverzeichnisse
Browser/
Browser-Tests mit Laravel Dusk und Cypress.
Status: Teilweise deprecated, manuell ausführen.
Ausführung:
php artisan dusk
npm run cypressDatasets/
Wiederverwendbare Pest Datasets für parametrisierte Tests.
Dateien:
users.php- User-Rollen und Base-Datavocab.php- Vokabel- und Morphologie-Datasetsuebungen.php- Übungs-Module-Datasets
Verwendung:
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:
Feature/
├── Auth/
│ ├── LoginTest.php
│ └── RegistrationTest.php
├── Glossarium/
│ └── VocabCrudTest.php
└── Uebungen/
└── UebungCrudTest.phpLegacy/
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 RollbackCreatesApplication.php- Laravel Application Bootstrap
Verwendung:
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:
modules/
└── [Kategorie]/
└── [Modulname]/
└── tests/
├── Feature/
│ └── ModuleFeatureTest.php
└── Unit/
└── ModuleUnitTest.phpBeispiel:
modules/Uebungen/UebungBedeutungenZuordnen/tests/
├── Feature/
│ └── BedeutungenZuordnenAPITest.php
└── Unit/
└── BedeutungenZuordnenModelTest.phpAusführung:
# 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:
| Pfad | Beschreibung |
|---|---|
tests/Legacy/README.md | Warum Legacy-Tests deaktiviert sind |
tests/Development/README.md | Verwendung von Development-Tests |
Best Practices
Verzeichniswahl
Feature-Test (Hauptanwendung):
tests/Feature/[DomainArea]/[Feature]Test.phpUnit-Test (Hauptanwendung):
tests/Unit/[Component]/[Component]Test.phpModul-Feature-Test:
modules/[Kategorie]/[Modulname]/tests/Feature/[Feature]Test.phpExperimenteller Test:
tests/Development/[IssueNumber oder FeatureName]/ExperimentTest.phpNaming 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
- Test in
tests/Feature/verschieben - Syntax auf Pest umstellen
uses(WithDatabaseTransactions::class)hinzufügen- Factory-User durch Base-Data User ersetzen
- Custom Expectations nutzen
Siehe Testing Leitlinien - Migration.
Von TestRepositories zu Datasets
// ALT: TestRepository
$users = TestUserRepository::getUsers();
// NEU: Dataset
test('test', fn($role) => /* ... */)->with('roles');