Skip to main content

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 fichier phpunit.xml et un répertoire tests/.
Pest est construit sur PHPUnit et propose une syntaxe plus concise et lisible. Si vous débutez, Pest est recommandé.

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

Utilisez make:test.
tests/Feature/TodoTest.php est généré.

Exécuter les tests

Utilisez php 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

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 de Feature/.

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èle Todo, testons les opérations CRUD.

Assertions courantes sur la réponse

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.
Pour la base, il est courant d’utiliser SQLite en mémoire.

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.
Si vous avez mis en cache la configuration, exécutez php artisan config:clear avant les tests. Sinon, l’ancienne configuration peut être utilisée.

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.
Puis exécutez avec --parallel.
Par défaut, autant de processus que de cœurs CPU sont lancés. Spécifiez le nombre avec --processes.
En parallèle, chaque processus doit utiliser une base isolée. La combinaison RefreshDatabase + SQLite en mémoire via phpunit.xml fonctionne parfaitement.

Prochaines étapes

Tests HTTP

Simulez des requêtes, testez avec authentification, faites des assertions JSON…
Dernière modification le 13 juillet 2026