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 configuratiebestandphpunit.xml en de map tests/ automatisch klaar.
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-commandomake:test genereer je een nieuwe testklasse.
tests/Feature/TodoTest.php gegenereerd.
Tests uitvoeren
Voer de tests uit met het commandophp artisan test.
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 mapFeature/.
Controleren of een pagina wordt weergegeven
Met de methodeget() 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 eenTodo-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.
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.
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.
--parallel.
--processes.
Volgende stap
HTTP-tests
Bekijk meer gedetailleerde HTTP-testtechnieken, zoals het simuleren van requests, testen met authenticatie en JSON-assertions.