Introductie
Laravel biedt first-class ondersteuning voor zowel PHPUnit als Pest als testframeworks. PHPUnit is het traditionele, class-gebaseerde testframework dat al vele jaren de standaard is in PHP, terwijl Pest een moderne, function-gebaseerde aanpak biedt met een eenvoudigere syntax. Beide frameworks worden officieel ondersteund en integreren naadloos met de testfunctionaliteit van Laravel.
Waarom
- Officiële ondersteuning: Beide frameworks worden officieel onderhouden en gedocumenteerd door Laravel
- Consistente tooling: De testhelpers van Laravel werken identiek met beide frameworks
- Community-standaarden: Het gebruik van deze frameworks garandeert compatibiliteit met community-packages en best practices
- Ingebouwde assertions: Beide bieden uitgebreide assertion-libraries die specifiek zijn ontworpen voor Laravel-applicaties
- Eenvoudige opzet: Laravel wordt vooraf geconfigureerd geleverd met PHPUnit, en Pest kan met minimale configuratie worden toegevoegd
- Continue verbetering: Beide frameworks ontvangen regelmatig updates en verbeteringen samen met Laravel-releases
Geschikt voor
- Alle Laravel-applicaties die geautomatiseerd testen vereisen
- Projecten waar teamleden de voorkeur geven aan traditioneel testen in xUnit-stijl (PHPUnit)
- Projecten waar teamleden de voorkeur geven aan moderne, function-gebaseerde testsyntax (Pest)
- Applicaties die moeten integreren met de testhelpers van Laravel (database factories, HTTP-testen, etc.)
- Teams die overstappen van andere PHP-frameworks die PHPUnit gebruiken
- Nieuwe projecten die op zoek zijn naar een schone, expressieve testsyntax (Pest)
Minder geschikt voor
- Applicaties met bestaande testsuites in andere PHP-testframeworks (hoewel migratie mogelijk is)
- Projecten met specifieke eisen voor alternatieve testtools die niet compatibel zijn met de testarchitectuur van Laravel
- Teams met een sterke voorkeur voor testframeworks buiten het PHP-ecosysteem (hoewel dit doorgaans zou wijzen op een geheel andere taalkeuze)
Voorbeelden
PHPUnit-voorbeeld
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
class UserRegistrationTest extends TestCase
{
use RefreshDatabase;
public function test_users_can_register(): void
{
$response = $this->post('/register', [
'name' => 'John Doe',
'email' => '[email protected]',
'password' => 'password',
'password_confirmation' => 'password',
]);
$response->assertRedirect('/dashboard');
$this->assertDatabaseHas('users', [
'email' => '[email protected]',
]);
}
}
Pest-voorbeeld
<?php
use App\Models\User;
test('users can register', function () {
$response = $this->post('/register', [
'name' => 'John Doe',
'email' => '[email protected]',
'password' => 'password',
'password_confirmation' => 'password',
]);
$response->assertRedirect('/dashboard');
expect(User::where('email', '[email protected]')->exists())->toBeTrue();
});
Kiezen tussen PHPUnit en Pest
Kies PHPUnit als:
- Je team al bekend is met traditioneel testen in xUnit-stijl
- Je een bestaand Laravel-project onderhoudt dat PHPUnit gebruikt
- Je de voorkeur geeft aan een class-gebaseerde, objectgeoriënteerde teststructuur
- Je compatibiliteit nodig hebt met oudere Laravel-versies (vóór Laravel 8)
Kies Pest als:
- Je een nieuw project start en een moderne testsyntax wilt
- Je team de voorkeur geeft aan functionele programmeerstijlen
- Je minder boilerplate-code in je tests wilt
- Je Laravel 8 of nieuwer gebruikt
Let op: Beide frameworks kunnen naast elkaar bestaan in hetzelfde project, wat een geleidelijke migratie mogelijk maakt indien gewenst.