Skip to main content

Einführung

Laravel stellt eine umfangreiche API zum Simulieren von HTTP-Anfragen und Verifizieren der Antworten bereit. Sie können damit Requests an Ihre Anwendung testen, ohne einen echten HTTP-Server zu starten.
Die Methode get() sendet eine GET-Anfrage an die Anwendung; assertStatus() prüft den HTTP-Statuscode der Antwort.
Während Tests wird die CSRF-Middleware automatisch deaktiviert. Sie müssen sie im Test nicht ausdrücklich abschalten.

Anfragen erzeugen

In Tests können Sie mit den Methoden get, post, put, patch und delete Anfragen absetzen. Diese senden keine echten Netzwerkanfragen, sondern simulieren die Verarbeitung innerhalb der Anwendung. Der Rückgabewert ist eine Instanz von Illuminate\Testing\TestResponse, die zahlreiche Assertion-Methoden bietet.
Innerhalb einer Testmethode sollten Sie grundsätzlich nur eine Anfrage senden. Mehrere Anfragen in derselben Testmethode können zu unerwartetem Verhalten führen.

Request-Header anpassen

Mit withHeaders() passen Sie die Header einer Anfrage an.

Cookies

Mit withCookie() bzw. withCookies() setzen Sie Cookie-Werte vor einer Anfrage.

Session und Authentifizierung

Mit withSession() legen Sie Session-Werte vor einer Anfrage fest.
Mit actingAs() versenden Sie Anfragen als authentifizierter Nutzer. Häufig in Kombination mit Model-Factories.
Als zweiter Parameter kann der Guard-Name übergeben werden. Dieser wird für die Dauer des Tests zum Standard.
Für Anfragen ohne Authentifizierung verwenden Sie actingAsGuest().

Antwort debuggen

Um während des Tests den Inhalt einer Antwort zu prüfen, nutzen Sie dump, dumpHeaders und dumpSession.
Um die Ausführung zu stoppen, verwenden Sie dd, ddHeaders, ddBody, ddJson oder ddSession.

Ausnahmen testen

Um zu prüfen, dass eine bestimmte Ausnahme ausgelöst wird, nutzen Sie die Facade Exceptions.
Um sicherzustellen, dass keine Ausnahme ausgelöst wurde, verwenden Sie assertNotReported oder assertNothingReported.
Um die Ausnahmebehandlung für eine Anfrage abzuschalten, nutzen Sie withoutExceptionHandling().
Um zu prüfen, dass Code in einer Closure eine Ausnahme wirft, verwenden Sie assertThrows().
Um zu prüfen, dass keine Ausnahme geworfen wird, verwenden Sie assertDoesntThrow().

Tests für JSON-APIs

Für JSON-APIs bietet Laravel zahlreiche Helfer. Mit json, getJson, postJson, putJson, patchJson, deleteJson und optionsJson senden Sie JSON-Anfragen.
Auf JSON-Daten der Antwort können Sie wie auf ein Array zugreifen.
assertJson() konvertiert die Antwort in ein Array und prüft, ob das angegebene Array Teil der JSON-Antwort ist. Zusätzliche Felder in der Antwort führen nicht zum Fehlschlagen, solange das erwartete Fragment enthalten ist.

Exakte Übereinstimmung

Mit assertExactJson() prüfen Sie, dass die zurückgegebene JSON-Antwort exakt dem angegebenen Array entspricht.

Werte per JSON-Pfad prüfen

Mit assertJsonPath() prüfen Sie den Wert an einem bestimmten Pfad.
Über eine Closure lässt sich der Wert flexibler prüfen.

Fluent JSON-Tests

Wird assertJson() eine Closure übergeben, können Sie Assertions per AssertableJson verkettet formulieren.
etc() erlaubt zusätzliche, nicht geprüfte Felder in der Antwort. Ohne etc() schlägt der Test fehl, wenn zusätzliche Felder vorhanden sind. So verhindern Sie unbeabsichtigt in Antworten enthaltene sensible Informationen.
Vorhandensein und Nichtvorhandensein von Attributen prüfen Sie mit has() und missing().
Für mehrere Attribute stehen hasAll() und missingAll() bereit.

JSON-Collections prüfen

Liefert die Route mehrere Elemente, prüfen Sie Anzahl und Inhalt mit has().
Um dieselbe Prüfung auf jedes Element anzuwenden, nutzen Sie each().

JSON-Typen prüfen

Mit whereType() und whereAllType() prüfen Sie den Datentyp einer Property.
Mit | können Sie mehrere Typen angeben; eine Übereinstimmung genügt.
Verfügbare Typen: string, integer, double, boolean, array, null.

Auth-Tests

Mit actingAs() senden Sie Anfragen als authentifizierter Nutzer.
Für einen bestimmten Guard geben Sie den Namen als zweites Argument an.

Beispiel: Registrierungsprozess testen

Beispiel für den Test eines realen Registrierungs-Endpunkts.

Session-Tests

Mit withSession() setzen Sie Session-Daten vor der Anfrage; mit assertSessionHas() prüfen Sie deren Vorhandensein.

Übersicht der Session-Assertions

Datei-Upload-Tests

Mit Illuminate\Http\UploadedFile und der Methode fake() erzeugen Sie Dummy-Dateien und -Bilder. In Kombination mit Storage::fake() testen Sie Uploads komfortabel.
Um sicherzustellen, dass eine Datei nicht existiert, nutzen Sie assertMissing().

Fake-Dateien anpassen

Bildgröße und Dateigröße sind einstellbar. Nützlich beim Testen von Validierungsregeln.

View-Tests

Sie können Views auch direkt rendern und testen, ohne eine HTTP-Anfrage zu simulieren. Die Methode view() erwartet den View-Namen und optional ein Daten-Array und liefert eine Instanz von Illuminate\Testing\TestView.
Für die TestView-Klasse stehen folgende Assertions bereit. Um den gerenderten Inhalt als String zu erhalten, casten Sie die TestView-Instanz.
Um Validierungsfehler an die View zu übergeben, nutzen Sie withViewErrors().

Komponenten testen

Mit blade() rendern Sie einen rohen Blade-Template-String.
Mit component() rendern Sie Blade-Komponenten. Rückgabewert ist eine Illuminate\Testing\TestComponent-Instanz.

Übersicht der Response-Assertions

Wichtige Assertions von Illuminate\Testing\TestResponse:

HTTP-Status

Redirects

Inhalte

JSON

Header und Cookies

Views

Validierung

Hinweise zu TDD

HTTP-Tests harmonieren hervorragend mit TDD (Test-Driven Development). Die folgenden Hinweise helfen Ihnen dabei.
Legen Sie HTTP-Tests im Verzeichnis tests/Feature/ an. Wer das Verhalten aus Sicht des Aufrufers (Request → Response) zuerst definiert, macht auch die zu implementierende Funktion klarer.
Nutzen Sie in Tests, die die Datenbank verwenden, das Trait RefreshDatabase. So wird die Datenbank nach jedem Test zurückgesetzt, und Tests bleiben voneinander isoliert. Das führt zu einem Testset, das unabhängig von der Ausführungsreihenfolge stabil ist.
Mit Model-Factories wie User::factory()->create() erzeugen Sie Testdaten mit wenig Code. Definieren Sie States, um bestimmte Zustände wiederverwendbar bereitzustellen – das erhöht die Lesbarkeit Ihrer Tests.
Prüfen Sie in einer Testmethode möglichst nur eine Sache. Fehler lassen sich dann schneller zuordnen. Das AAA-Muster (Arrange → Act → Assert) erleichtert das Lesen.
Für Routen mit Authentifizierung immer sowohl den authentifizierten als auch den nicht authentifizierten Fall testen. So finden Sie Sicherheitsprobleme frühzeitig.

Verwandte Seiten

Einführung in Tests

Grundlagen zum Schreiben von Tests in Laravel und zur Nutzung von php artisan test.
Zuletzt geändert am 13. Juli 2026