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.
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 jedataset() of een inline with().
Inline datasets
Benoemde datasets
Definieer datasets in de maptests/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
MetHttp::fake() stub je responses zonder daadwerkelijke HTTP-requests te versturen.
Een basisfake
Foutresponses testen
Een netwerkstoring simuleren
Events, mail en notificaties faken
Event::fake()
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.
Code coverage meten
Hiervoor is Xdebug of PCOV nodig.Gerelateerde pagina’s
Introductie tot testen
Bekijk de basis van het schrijven van tests in Laravel en het gebruik van
php artisan test.