Skip to main content

Wat is Pest?

Pest is een testframework dat bovenop PHPUnit is gebouwd en dat sinds Laravel 11 standaard wordt gebruikt in nieuwe projecten. Je gebruikt de rijke assertieset van PHPUnit ongewijzigd, maar schrijft tests in een beknopte, closure-gebaseerde syntaxis. De belangrijkste verschillen met PHPUnit:
Pest-tests worden uitgevoerd door PHPUnit en kunnen dus naast bestaande PHPUnit-tests bestaan. Je voert ze uit met php artisan test of vendor/bin/pest.

Wanneer gebruik je describe / it / test?

test()

De eenvoudigste definitie. De testnaam wordt direct als beschrijving gebruikt.

it()

In de stijl van “it should…” schrijf je tests die dicht bij natuurlijke taal liggen.

describe()

Groepeert gerelateerde tests. Handig voor het delen van beforeEach() en het logisch ordenen binnen een bestand.
describe() kun je nesten. Te diepe nesting maakt tests echter slecht leesbaar; houd twee niveaus als richtlijn aan.

De Expectation API

expect() is de eigen assertiesyntaxis van Pest. Via methodeketens stapel je voorwaarden op.

Basisasserties

Asserties op modellen

De and()-keten

Elk element van een array verifiëren met each()

Geparametriseerde tests met datasets

Om dezelfde logica met meerdere invoerwaarden te testen, gebruik je dataset() of een inline with().

Inline datasets

Benoemde datasets

Definieer datasets in de map tests/Datasets.

Dynamische datasets met closures

Unittests met Mockery

Een service mocken

Spies

Anders dan een mock roept een spy de implementatie aan én registreert de aanroepen.

Partial mocks

Mock alleen bepaalde methodes en gebruik voor de rest de echte implementatie.

Externe API-aanroepen testen met HTTP-fakes

Met Http::fake() stub je responses zonder daadwerkelijke HTTP-requests te versturen.

Een basisfake

Foutresponses testen

Een netwerkstoring simuleren

Events, mail en notificaties faken

Event::fake()

Je kunt ook alleen specifieke events faken en de rest echt laten verwerken.

Mail::fake()

Notification::fake()

Artisan-commando’s testen

Interactieve commando’s testen

RefreshDatabase en LazilyRefreshDatabase

RefreshDatabase

Rolt na elke test de database terug en houdt zo een schone staat aan. De migrations worden uitgevoerd bij de start van de testsuite.

LazilyRefreshDatabase

RefreshDatabase controleert de migrations bij elke test, maar LazilyRefreshDatabase stelt de migrations uit totdat er een test draait die de database daadwerkelijk wijzigt. Als je veel tests hebt die de database niet aanraken, levert dat snelheidswinst op.
Voor de meeste projecten is RefreshDatabase de veilige keuze. Overweeg LazilyRefreshDatabase wanneer je testsuite groot wordt en veel tests geen databasebewerkingen doen.

Code coverage meten

Hiervoor is Xdebug of PCOV nodig.
Het meten van code coverage verlengt de testduur aanzienlijk. In een CI-omgeving raden we aan dit in een aparte job te doen of alleen bij pull requests uit te voeren.

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