Skip to main content

Introductie

Laravel biedt een rijke API om HTTP-requests te simuleren en responses te verifiëren. Je kunt requests aan je applicatie binnen tests nabootsen zonder een echte HTTP-server op te zetten.
De methode get() stuurt een GET-request naar de applicatie en assertStatus() verifieert de HTTP-statuscode van de teruggekregen response.
Tijdens het uitvoeren van tests wordt de CSRF-middleware automatisch uitgeschakeld. Je hoeft die in tests niet expliciet uit te schakelen.

Requests maken

Binnen tests kun je requests versturen met de methoden get, post, put, patch en delete. Deze methoden versturen geen echt netwerkrequest, maar simuleren het binnen de applicatie. De retourwaarde is een instantie van Illuminate\Testing\TestResponse, die diverse assertion-methoden biedt.
Het is aan te raden om binnen één testmethode in principe maar één request te versturen. Meerdere requests binnen dezelfde test uitvoeren kan onverwacht gedrag veroorzaken.

Requestheaders aanpassen

Met de methode withHeaders() pas je de headers van het request aan.

Cookies

Met de methoden withCookie() of withCookies() stel je cookiewaarden in vóór het request.

Sessie en authenticatie

Met de methode withSession() stel je sessiedata in vóór het request.
Met de methode actingAs() verstuur je requests als geauthenticeerde gebruiker. Je gebruikt dit in combinatie met modelfactory’s.
Geef je de guardnaam door als tweede argument van actingAs(), dan wordt met die guard geauthenticeerd. Voor de duur van de test wordt die guard de standaard.
Wil je een request versturen zonder authenticatie, gebruik dan actingAsGuest().

Responses debuggen

Wil je tijdens een test de inhoud van de response bekijken, gebruik dan de methoden dump, dumpHeaders en dumpSession.
Wil je de uitvoering stoppen, gebruik dan de methoden dd, ddHeaders, ddBody, ddJson en ddSession.

Excepties testen

Om te testen dat een specifieke exceptie wordt gegooid, gebruik je de Exceptions-facade.
Om te controleren dat een exceptie niet is gegooid, gebruik je assertNotReported of assertNothingReported.
Wil je een request versturen met uitgeschakelde exceptieafhandeling, gebruik dan withoutExceptionHandling().
Om te testen of code in een closure een exceptie gooit, gebruik je assertThrows().
Om te controleren dat er geen exceptie wordt gegooid, gebruik je assertDoesntThrow().

JSON-API’s testen

Laravel biedt veel helpers voor het testen van JSON-API’s. Met de methoden json, getJson, postJson, putJson, patchJson, deleteJson en optionsJson verstuur je JSON-requests.
Op de data van een JSON-response heb je toegang als arrayvariabele.
assertJson() zet de response om naar een array en verifieert of de opgegeven array in de JSON-response voorkomt. Ook als de JSON andere properties bevat, slaagt de test zolang het opgegeven fragment aanwezig is.

Assertions op exacte overeenkomst

Met assertExactJson() verifieer je dat de teruggegeven JSON exact overeenkomt met de opgegeven array.

Assertions op JSON-paden

Met assertJsonPath() verifieer je de data op een opgegeven pad.
Je kunt ook een closure doorgeven voor flexibelere verificatie.

Fluente JSON-tests

Geef je een closure door aan assertJson(), dan kun je met een AssertableJson-instantie fluent assertions schrijven.
De methode etc() staat toe dat er properties bestaan waarop geen assertion is gedaan. Gebruik je etc() niet, dan faalt de test wanneer er properties bestaan waar je geen assertion op doet. Zo voorkom je dat je onbedoeld gevoelige informatie in de response opneemt.
Om de aan- of afwezigheid van attributen te controleren gebruik je has() en missing().
Om meerdere attributen tegelijk te controleren gebruik je hasAll() en missingAll().

Assertions op JSON-collecties

Geeft een route een JSON-response met meerdere items terug, dan kun je met de methode has() het aantal items en de inhoud van de collectie verifiëren.
Om dezelfde assertions op alle items toe te passen gebruik je each().

Assertions op JSON-types

Met whereType() en whereAllType() verifieer je het type van properties.
Met het |-teken kun je ook meerdere types opgeven. De assertion slaagt zodra één van de types overeenkomt.
De beschikbare types zijn string, integer, double, boolean, array en null.

Authenticatietests

Met actingAs() verstuur je requests als geauthenticeerde gebruiker.
Om met een specifieke guard te authenticeren geef je de guardnaam op als tweede argument.

Voorbeeld: de registratieflow testen

Een voorbeeld waarin het echte registratie-endpoint wordt getest.

Sessies testen

Met withSession() stel je vooraf sessiedata in en verstuur je vervolgens het request. Met assertSessionHas() verifieer je of een waarde in de sessie bestaat.

Overzicht van sessie-assertions

Bestandsuploads testen

Met de methode fake() van de klasse Illuminate\Http\UploadedFile genereer je dummybestanden of -afbeeldingen. In combinatie met de methode fake() van de Storage-facade test je bestandsuploads eenvoudig.
Om te controleren dat een bestand niet bestaat, gebruik je assertMissing().

Dummybestanden aanpassen

Je kunt de afmetingen en bestandsgrootte van afbeeldingen opgeven. Handig voor het testen van validatieregels.

Views testen

Je kunt views direct renderen en testen zonder een HTTP-request te simuleren. De methode view() accepteert een viewnaam en optioneel een array met data, en geeft een instantie van Illuminate\Testing\TestView terug.
Op de TestView-klasse zijn de volgende assertion-methoden beschikbaar. Om de inhoud van de gerenderde view als string op te halen, cast je de TestView-instantie naar een string.
Om validatiefouten door te geven aan een view gebruik je withViewErrors().

Componenten testen

Met de methode blade() render je een ruwe Blade-templatestring.
Met de methode component() render je een Blade-component. Deze geeft een instantie van Illuminate\Testing\TestComponent terug.

Overzicht van response-assertions

De belangrijkste assertion-methoden van de klasse Illuminate\Testing\TestResponse.

HTTP-status

Redirects

Content

JSON

Headers en cookies

Views

Validatie

Tips om TDD in de praktijk te brengen

HTTP-tests passen uitstekend bij TDD (testgedreven ontwikkeling). Houd de volgende punten in gedachten voor het beste resultaat.
HTTP-tests maak je aan in de directory tests/Feature/. Door eerst het gedrag van buitenaf te definiëren (request → response) wordt duidelijk welke functionaliteit je moet implementeren.
Gebruik in tests die de database gebruiken de trait RefreshDatabase. Na elke test wordt de database gereset, waardoor data-interferentie tussen tests wordt voorkomen. Door tests onafhankelijk te houden bouw je een stabiele testsuite die niet afhangt van de uitvoeringsvolgorde.
Met modelfactory’s zoals User::factory()->create() maak je testdata eenvoudig aan. Door factory-states te definiëren voor modellen met een specifieke toestand verbeter je de leesbaarheid van je tests.
Verifieer in één testmethode zo veel mogelijk maar één ding. Zo is de oorzaak makkelijker te achterhalen wanneer een test faalt. Met het AAA-patroon “Arrange (voorbereiden) → Act (uitvoeren) → Assert (verifiëren)” in gedachten worden je tests leesbaarder.
Schrijf voor routes die authenticatie vereisen altijd tests voor zowel het “geauthenticeerde” als het “niet-geauthenticeerde” geval. Zo ontdek je beveiligingsproblemen vroegtijdig.

Gerelateerde pagina’s

Introductie tot testen

Bekijk de basis van het schrijven van tests in Laravel en het gebruik van php artisan test.
Laatst gewijzigd op 6 september 2026