Qu’est-ce que les tests
Les tests sont un mécanisme automatisé pour vérifier que le code fonctionne comme prévu. En écrivant des tests, vous pouvez rapidement vérifier que les modifications ou les ajouts n’ont pas cassé les comportements existants. Ils permettent aussi à toute l’équipe de modifier et de revoir le code avec sérénité. Laravel intègre le support des tests dès l’installation, et vous pouvez utiliser Pest comme PHPUnit. Une nouvelle installation contient déjà un fichierphpunit.xml et un répertoire tests/.
Structure du répertoire tests/
Feature/— Contient les tests fonctionnels, qui simulent des requêtes HTTP et couvrent de larges parties du système : plusieurs objets qui collaborent, endpoints d’API. La plupart de vos tests iront ici.Unit/— Contient les tests unitaires, ciblant une classe ou une méthode. L’application Laravel n’est pas amorcée : pas d’accès à la base ni aux fonctionnalités du framework.
Créer un test
Utilisezmake:test.
tests/Feature/TodoTest.php est généré.
Exécuter les tests
Utilisezphp artisan test.
vendor/bin/pest ou vendor/bin/phpunit donnent le même résultat, mais php artisan test offre une sortie plus lisible.
Pour cibler une suite ou d’autres options :
Écrire un test simple
Exemples d’assertions basiques.Assertions courantes
| Pest | PHPUnit | Description |
|---|---|---|
expect($x)->toBe($y) | $this->assertSame($y, $x) | Strictement égal |
expect($x)->toEqual($y) | $this->assertEquals($y, $x) | Égal sans considérer le type |
expect($x)->toBeTrue() | $this->assertTrue($x) | Est true |
expect($x)->toBeFalse() | $this->assertFalse($x) | Est false |
expect($x)->toBeNull() | $this->assertNull($x) | Est null |
expect($x)->toContain($y) | $this->assertStringContainsString($y, $x) | Contient une sous-chaîne |
expect($x)->toHaveCount($n) | $this->assertCount($n, $x) | Nombre d’éléments |
Tests HTTP
Les tests HTTP de Laravel simulent les requêtes vers les routes sans démarrer un vrai serveur. Une fonctionnalité puissante à utiliser dans les tests deFeature/.
Tester l’affichage d’une page
get() envoie une requête GET, puis on vérifie la réponse.
Exemple : tests HTTP pour une app ToDo
Avec un modèleTodo, testons les opérations CRUD.
Assertions courantes sur la réponse
| Méthode | Description |
|---|---|
assertStatus(200) | Vérifie le code HTTP |
assertOk() | Vérifie que le statut est 200 |
assertRedirect('/path') | Vérifie la redirection |
assertSee('texte') | Vérifie que le texte apparaît dans la réponse |
assertDontSee('texte') | Vérifie que le texte n’apparaît pas |
assertJson([...]) | Vérifie une réponse JSON |
assertDatabaseHas('table', [...]) | Vérifie la présence d’un enregistrement |
assertDatabaseMissing('table', [...]) | Vérifie l’absence d’un enregistrement |
Le trait
RefreshDatabase réinitialise la base après chaque test. Utile pour éviter que les tests interfèrent entre eux.Environnement de test
Configuration phpunit.xml
phpunit.xml à la racine configure l’environnement de test.
Par défaut, session et cache utilisent le driver array, donc rien n’est persisté pendant les tests.
Fichier .env.testing
Un fichier .env.testing à la racine remplace .env pendant les tests.
Utile pour isoler la base ou les services externes utilisés en test.
Exécution parallèle
Quand le nombre de tests augmente, le temps d’exécution grandit. L’option--parallel lance plusieurs processus en parallèle pour réduire ce temps.
Installez d’abord le package brianium/paratest.
--parallel.
--processes.
Prochaines étapes
Tests HTTP
Simulez des requêtes, testez avec authentification, faites des assertions JSON…