Skip to main content

Was sind Tests

Tests prüfen automatisiert, ob Ihr Code so funktioniert wie erwartet. Wenn Sie neue Features hinzufügen oder Bugs beheben, sehen Sie mit Tests schnell, ob bestehendes Verhalten beschädigt wurde. Im Team lassen sich Änderungen dank Tests entspannter durchführen und reviewen. Laravel bringt Test-Unterstützung von Anfang an mit – wahlweise Pest oder PHPUnit. Nach einer Neuinstallation existieren phpunit.xml und das Verzeichnis tests/ bereits.
Pest basiert auf PHPUnit und bietet eine kompaktere, gut lesbare Syntax. Wenn Sie neu einsteigen, ist Pest eine gute Wahl.

Aufbau des Verzeichnisses tests/

  • Feature/ – Feature-Tests. Größere Tests mit HTTP-Anfragen, die mehrere Komponenten oder API-Endpunkte prüfen. Die meisten Ihrer Tests landen hier.
  • Unit/ – Unit-Tests. Testen einzelne Klassen oder Methoden. Die Laravel-App wird nicht gebootet – Datenbank und andere Framework-Funktionen stehen nicht zur Verfügung.

Test erzeugen

Neue Testklassen erzeugen Sie mit make:test.
Ergebnis: tests/Feature/TodoTest.php.

Tests ausführen

Mit php artisan test.
vendor/bin/pest oder vendor/bin/phpunit funktionieren genauso; php artisan test liefert die schönere Ausgabe. Optionen zum Filtern:

Einfache Tests schreiben

Beispiele für einfache Assertions:

Häufige Assertions

HTTP-Tests

Laravels HTTP-Tests simulieren Requests, ohne dass ein echter HTTP-Server läuft. Sie kommen in Feature/-Tests zum Einsatz.

Seite anzeigen

get() sendet einen GET-Request und Sie prüfen die Antwort.

Beispiel: HTTP-Tests einer ToDo-App

Angenommen, Sie haben ein Todo-Modell. So testen Sie CRUD:

Häufige Response-Assertions

Der Trait RefreshDatabase setzt die Datenbank nach jedem Test zurück, damit sich Tests nicht gegenseitig beeinflussen.

Testumgebung

phpunit.xml

Die Testumgebung konfigurieren Sie in phpunit.xml im Projekt-Root. Standardmäßig sind Session und Cache auf array gesetzt, sodass keine Daten überleben.
Als Datenbank ist ein SQLite-In-Memory-Setup üblich:

Datei .env.testing

Wenn Sie im Root eine .env.testing anlegen, wird sie bei Testläufen anstelle von .env geladen. Praktisch für spezielle Testdatenbanken oder externe Dienste.
Ist der Konfigurations-Cache aktiv, führen Sie vor dem Testen php artisan config:clear aus, sonst greifen alte Werte.

Parallele Testausführung

Mit --parallel verkürzen Sie Laufzeiten, indem mehrere Prozesse gleichzeitig testen. Zuerst brianium/paratest installieren:
Dann:
Standardmäßig entstehen so viele Prozesse wie CPU-Kerne. Anzahl mit --processes steuern:
Bei parallelen Tests benötigt jeder Prozess eine eigene Datenbank. RefreshDatabase in Kombination mit In-Memory-SQLite funktioniert dafür sehr gut.

Nächste Schritte

HTTP-Tests

Details zu Request-Simulation, authentifizierten Tests und JSON-Assertions.
Zuletzt geändert am 13. Juli 2026