Waarom Pest de default van Laravel werd
Sinds Laravel 11 wordt Pest als standaard testframework geselecteerd wanneer je een project aanmaakt metlaravel new. PHPUnit is jarenlang de standaard testtool voor PHP geweest, maar Pest bouwt voort op PHPUnit en biedt een beknoptere, beter leesbare testsyntaxis.
Pest draait bovenop PHPUnit, dus bestaande PHPUnit-tests blijven gewoon werken. Je kunt stap voor stap migreren.
De belangrijkste verschillen met PHPUnit
Testsyntaxis
Het meest zichtbare verschil is hoe je tests schrijft.- Pest
- PHPUnit
test() van Pest ontvangt een closure. Omdat je geen klasse of methode hoeft te definiëren, is de bedoeling van de test vanaf de eerste regel duidelijk. Je kunt op dezelfde manier it() gebruiken. In het Engels lees je dan een natuurlijke zin, zoals it('can login', ...).
De expect()-API
Het meest kenmerkende aan Pest zijn de gekoppelde assertions met expect().
expect($value)->toBe(), ->toBeNull(), ->toContain(), ->toHaveCount() en meer schrijf je assertions die als natuurlijk Engels lezen. Je kunt ook meerdere assertions bundelen in een methodchain.
Setup en teardown
Het equivalent vansetUp() in PHPUnit is beforeEach(), en tearDown() komt overeen met afterEach().
Datasets — table-driven tests
Wil je dezelfde testlogica uitvoeren met meerdere datasets, dan gebruik jedataset.
'geen e-mail') wordt aan de testnaam toegevoegd, zodat je in één oogopslag ziet bij welk patroon de test faalt.
arch()-tests — automatische architectuurcontroles
De arch()-functie van Pest test de structuur van je codebase. Je kunt architectuurregels automatisch verifiëren, zoals “hangen controllers niet direct van modellen af” of “extenden modellen Eloquent”.
laravel() verifieert in één keer regels die aansluiten bij de gangbare Laravel-conventies, zoals modelnaamgeving, controller-overerving en de structuur van middleware.
Praktijkvoorbeelden in een Laravel-project
Een test aanmaken
De testhelpers van Laravel gewoon blijven gebruiken
Omdat Pest deTestCase van Laravel extendt, kun je alle Laravel-testhelpers gewoon blijven gebruiken: actingAs(), assertDatabaseHas(), de HTTP-testhelpers en meer.
Factory’s en databasetransacties
Ook de traitsRefreshDatabase en DatabaseTransactions pas je eenvoudig toe met uses(). Zet je het bovenaan een bestand, dan geldt het voor dat hele bestand.
tests/Pest.php, dan is RefreshDatabase automatisch actief voor al je Feature-tests. Je kunt het in individuele testbestanden nog steeds overschrijven.
Naast bestaande PHPUnit-tests werken
Pest en PHPUnit kunnen naast elkaar bestaan in hetzelfde project. Je hoeft bestaande PHPUnit-tests niet te herschrijven; het is genoeg om nieuwe tests in Pest-stijl te schrijven.Vanaf Laravel 11 gebruikt
php artisan test automatisch Pest wanneer Pest is geïnstalleerd.Zo pak je de migratie aan
- Voeg eerst de
uses()-configuratie toe aantests/Pest.php - Schrijf nieuw toegevoegde tests in Pest-stijl
- Migreer bestaande PHPUnit-tests stukje bij beetje, terwijl je controleert of alles blijft werken
Samenvatting
Pest is geen vervanging van PHPUnit, maar een laag bovenop PHPUnit. De integratie met Laravel gaat diep — zo diep dat Pest tegenwoordig standaard wordt geselecteerd bij het genereren van een starter kit. De kosten om het in een bestaand project te introduceren zijn laag: begin gewoon met je nieuwe tests en je profiteert er meteen van.
Hoe meer tests je schrijft, hoe sneller je bugs vindt en hoe lager de psychologische drempel voor refactoren wordt. Pest is een gereedschap dat precies die “frictie van het schrijven van tests” wegneemt.
Officiële Pest-documentatie
Raadpleeg de officiële documentatie voor alle functies van Pest, zoals datasets, coverage en parallelle uitvoering.