Skip to main content

Warum Pest zum Laravel-Standard wurde

Seit Laravel 11 wird beim Anlegen eines Projekts mit laravel 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.
Hinter der offiziellen Wahl von Pest steht das Ziel, die Hürden beim Schreiben von Tests zu reduzieren. Rituale wie „Klasse anlegen, Methode schreiben” entfallen; die Schreibweise lässt Sie sich auf das konzentrieren, was Sie testen wollen – so entsteht die Gewohnheit, Tests zu schreiben, viel natürlicher.

Wichtigste Unterschiede zu PHPUnit

Schreibweise der Tests

Der auffälligste Unterschied ist die Testsyntax.
Die 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().
Sie können Assertions in natürlicher englischer Form schreiben – expect($value)->toBe(), ->toBeNull(), ->toContain(), ->toHaveCount() – und mehrere Assertions per Method Chaining kombinieren.

Setup und Teardown

Das Pendant zu PHPUnits setUp() ist beforeEach(), zu tearDown() afterEach().

Datasets – Table-driven Tests

Möchten Sie dieselbe Testlogik mit mehreren Daten ausführen, verwenden Sie dataset.
Die Labels der Datasets (z. B. '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?”.
arch()-Tests werden statisch über den Quellcode ausgeführt. Sie stellen keine echten HTTP-Requests und greifen nicht auf die Datenbank zu und sind daher sehr schnell.
Pest bringt außerdem Presets für häufig verwendete Architekturregeln mit.
Das Preset laravel() bündelt gebräuchliche Regeln – Modellnamen, Controller-Vererbung, Middleware-Struktur – nach Laravel-typischen Konventionen.

Praxisbeispiele im Laravel-Projekt

Tests anlegen

Ab Laravel 11 wird bei Default-Konfiguration eine Testdatei im Pest-Format erzeugt.

Laravel-Test-Helper unverändert nutzen

Da Pest von Laravels TestCase erbt, stehen actingAs(), assertDatabaseHas(), die HTTP-Test-Helfer und alle weiteren Test-Helfer unverändert zur Verfügung.

Factories und Datenbank-Transaktionen

Traits wie RefreshDatabase oder DatabaseTransactions lassen sich bequem über uses() einbinden. Am Dateianfang angewendet, gilt es für die gesamte Datei.
Einmal in 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

  1. In tests/Pest.php die uses()-Konfiguration ergänzen
  2. Neue Tests im Pest-Format schreiben
  3. Bestehende PHPUnit-Tests behutsam und mit Prüfung migrieren
Es ist nicht nötig, alle Tests hastig umzuschreiben. Da die Syntax von Pest gegenüber PHPUnit weniger Lernaufwand erfordert, verbreitet sie sich im Team meist reibungslos.

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.
Zuletzt geändert am 13. Juli 2026