Warum Pest zum Laravel-Standard wurde
Seit Laravel 11 wird beim Anlegen eines Projekts mitlaravel new Pest als Test-Framework standardmäßig ausgewählt. PHPUnit war lange das Standard-Testtool in PHP; Pest baut darauf auf und bietet eine kürzere, besser lesbare Schreibweise.
Da Pest auf PHPUnit läuft, funktionieren bestehende PHPUnit-Tests unverändert weiter. Eine Migration lässt sich schrittweise vornehmen.
Wichtigste Unterschiede zu PHPUnit
Schreibweise der Tests
Der auffälligste Unterschied ist die Testsyntax.- Pest
- PHPUnit
test()-Funktion von Pest nimmt eine Closure entgegen. Ohne Klassen- und Methodendefinition wird die Testabsicht schon in der ersten Zeile klar. it() funktioniert analog. Auf Englisch liest sich it('can login', ...) wie ein natürlicher Satz.
Die expect()-API
Das prägnanteste Merkmal von Pest sind die verkettbaren Assertions mit expect().
expect($value)->toBe(), ->toBeNull(), ->toContain(), ->toHaveCount() – und mehrere Assertions per Method Chaining kombinieren.
Setup und Teardown
Das Pendant zu PHPUnitssetUp() ist beforeEach(), zu tearDown() afterEach().
Datasets – Table-driven Tests
Möchten Sie dieselbe Testlogik mit mehreren Daten ausführen, verwenden Siedataset.
'keine E-Mail') werden an den Testnamen angehängt, sodass sofort ersichtlich ist, welche Variante fehlgeschlagen ist.
arch()-Tests – automatische Architektur-Checks
arch() in Pest sind Tests, die die Struktur der Codebasis prüfen. Sie können automatisch Architekturregeln validieren wie „hängt ein Controller direkt vom Modell ab?” oder „erbt das Modell von Eloquent?”.
laravel() bündelt gebräuchliche Regeln – Modellnamen, Controller-Vererbung, Middleware-Struktur – nach Laravel-typischen Konventionen.
Praxisbeispiele im Laravel-Projekt
Tests anlegen
Laravel-Test-Helper unverändert nutzen
Da Pest von LaravelsTestCase erbt, stehen actingAs(), assertDatabaseHas(), die HTTP-Test-Helfer und alle weiteren Test-Helfer unverändert zur Verfügung.
Factories und Datenbank-Transaktionen
Traits wieRefreshDatabase oder DatabaseTransactions lassen sich bequem über uses() einbinden. Am Dateianfang angewendet, gilt es für die gesamte Datei.
tests/Pest.php konfiguriert, wird RefreshDatabase automatisch in allen Feature-Tests aktiviert. Einzelne Testdateien können das überschreiben.
Koexistenz mit bestehenden PHPUnit-Tests
Pest und PHPUnit lassen sich im selben Projekt einsetzen. Bestehende PHPUnit-Tests müssen nicht umgeschrieben werden; Sie schreiben lediglich neue Tests im Pest-Format.Ab Laravel 11 verwendet
php artisan test automatisch Pest, sofern Pest installiert ist.Wie Sie die Migration angehen
- In
tests/Pest.phpdieuses()-Konfiguration ergänzen - Neue Tests im Pest-Format schreiben
- Bestehende PHPUnit-Tests behutsam und mit Prüfung migrieren
Fazit
Pest ersetzt PHPUnit nicht, sondern ist eine darauf aufsetzende Schicht. Die Laravel-Integration ist tief; im Starterkit-Setup wird Pest als Default gewählt. Die Einführung in Bestandsprojekte ist günstig – schon der Einstieg mit neuen Tests bringt Nutzen.
Wenn mehr Tests geschrieben werden, werden Bugs früher entdeckt und die Hürde vor Refactorings sinkt. Pest ist ein Werkzeug, um genau diese „Reibung beim Testschreiben” zu reduzieren.
Offizielle Pest-Dokumentation
Zu Datasets, Coverage, paralleler Ausführung und allen weiteren Funktionen von Pest konsultieren Sie die offizielle Dokumentation.