Skip to main content

Wat is testen

Testen is een mechanisme waarmee je automatisch verifieert of je code zich gedraagt zoals verwacht. Door tests te schrijven controleer je snel of bestaand gedrag niet kapot is gegaan na het toevoegen van functionaliteit of het doorvoeren van fixes. In teamverband zorgen tests ervoor dat je met vertrouwen code kunt wijzigen en reviewen. Laravel heeft testondersteuning vanaf het begin ingebouwd; je kunt zowel Pest als PHPUnit gebruiken. Bij een nieuwe installatie staan het configuratiebestand phpunit.xml en de map tests/ automatisch klaar.
Pest is gebouwd bovenop PHPUnit en laat je tests schrijven met een beknoptere, beter leesbare syntax. Begin je nu met testen, dan is Pest de aanbevolen keuze.

De structuur van de map tests/

  • Feature/ — hier plaats je featuretests. Voor tests van grotere eenheden, inclusief HTTP-requests. Denk aan gedrag waarbij meerdere objecten samenwerken of het verifiëren van API-endpoints — tests die dicht bij de hele applicatie staan. De meeste tests komen hier terecht.
  • Unit/ — hier plaats je unittests. Voor tests van kleine eenheden, zoals een enkele klasse of methode. De Laravel-applicatie wordt niet opgestart, dus de database en andere frameworkfunctionaliteit zijn niet beschikbaar.

Tests maken

Met het Artisan-commando make:test genereer je een nieuwe testklasse.
Er wordt een tests/Feature/TodoTest.php gegenereerd.

Tests uitvoeren

Voer de tests uit met het commando php artisan test.
Rechtstreeks vendor/bin/pest of vendor/bin/phpunit uitvoeren geeft hetzelfde resultaat, maar php artisan test heeft overzichtelijkere output en wordt daarom aanbevolen. Wil je alleen een specifieke testsuite uitvoeren, gebruik dan opties.

De basis van tests schrijven

Een voorbeeld van eenvoudige assertions.

Veelgebruikte assertions

HTTP-tests

Met de HTTP-tests van Laravel simuleer je requests naar routes zonder een echte HTTP-server op te zetten. Krachtige functionaliteit die beschikbaar is in de testklassen van de map Feature/.

Controleren of een pagina wordt weergegeven

Met de methode get() verstuur je een GET-request en verifieer je de response.

Voorbeeld van HTTP-tests voor een todo-app

Aan de hand van een applicatie met een Todo-model testen we de verschillende CRUD-operaties.

Veelgebruikte response-assertions

Met de trait RefreshDatabase wordt de database na elke test gereset. Je gebruikt deze om te voorkomen dat data tussen tests interfereert.

De testomgeving

De configuratie van phpunit.xml

De configuratie van de testomgeving regel je in phpunit.xml in de projectroot. Standaard zijn sessies en cache ingesteld op de array-driver, zodat er geen data achterblijft tijdens de tests.
Voor de database is het gebruikelijk om de in-memory database van SQLite te gebruiken, die geen bestanden achterlaat.

Het .env.testing-bestand

Maak je een .env.testing-bestand in de projectroot, dan wordt dat bij het draaien van tests geladen in plaats van .env. Handig als je een aparte databaseverbinding of configuratie van externe diensten wilt voor je tests.
Heb je je configuratie gecachet, voer dan php artisan config:clear uit voordat je tests draait. Anders kan een oude cache worden gebruikt waardoor de configuratie niet doorwerkt.

Tests parallel uitvoeren

Naarmate het aantal tests groeit, neemt de uitvoeringstijd toe. Met de optie --parallel voer je tests gelijktijdig uit in meerdere processen en bespaar je tijd. Installeer eerst het pakket brianium/paratest.
Voer daarna uit met de optie --parallel.
Standaard worden er evenveel processen gestart als je CPU cores heeft. Het aantal processen geef je op met de optie --processes.
Bij parallel testen moet elk proces een eigen database gebruiken. De combinatie van de trait RefreshDatabase en de in-memory SQLite-configuratie in phpunit.xml werkt probleemloos.

Volgende stap

HTTP-tests

Bekijk meer gedetailleerde HTTP-testtechnieken, zoals het simuleren van requests, testen met authenticatie en JSON-assertions.
Laatst gewijzigd op 6 september 2026