Les tests dans laravel
Laravel comprend un ensemble d'outils et de fonctionnalités pour faciliter le
développement d'applications web. Les tests sont un élément important du
développement d'applications, car ils permettent de s'assurer que le code est
fonctionnel et répond aux exigences spécifiées.
Laravel inclut un système de tests intégré appelé PHPUnit, qui permet de créer des
tests unitaires et des tests fonctionnels pour notre application.
• Les tests unitaires sont des tests qui se concentrent sur une très petite partie
isolée de notre code. En fait, la plupart des tests unitaires se concentrent
probablement sur une seule méthode. Les tests dans le répertoire de test "Unit"
ne démarrent pas l’application Laravel et ne peuvent donc pas accéder à la
base de données de l’application ou à d'autres services de framework.
• les tests fonctionnels peuvent tester une plus grande partie du code, y compris
la façon dont plusieurs objets interagissent entre eux ou même une requête
HTTP complète à un point de terminaison JSON. Généralement, la plupart de
nos tests doivent être des tests de fonctionnalités. Ces types de tests offrent la
plus grande confiance dans le fait que notre système dans son ensemble
fonctionne comme prévu
Pour écrire des tests dans Laravel, on peut créer des fichiers de tests dans le
répertoire "tests" de notre application. Les fichiers de tests doivent être nommés en
fonction de leur type de test et être placés dans des sous-répertoires correspondant au
type de test (par exemple, "Unit", "Feature").
Remarque : pour executer un test : php artisan test
Configuration :
Le fichier phpunit.xml est un fichier de configuration pour PHPUnit qui est utilisé
pour spécifier les options de configuration pour les tests. Ce fichier est utilisé pour
personnaliser les options de PHPUnit pour notre projet, telles que les chemins des
fichiers de test, les variables d'environnement et les options de rapport.
Dans Laravel, le fichier phpunit.xml est inclus dans le dossier racine du projet. Vous
pouvez utiliser ce fichier pour personnaliser les options de configuration de PHPUnit
pour votre application Laravel.mais assurez-vous de vider votre cache de
configuration à l'aide de la commande Artisan config:clear avant de lancer vos tests !
Proposé par : ELGARRAI Zineb
De plus, vous pouvez créer un fichier .env.testing à la racine de votre projet. Ce
fichier sera utilisé à la place du fichier .env lors de l'exécution de tests PHPUnit.
Créer des tests
Pour créer un nouveau scénario de test, utilisez la make:testcommande Artisan. Par
défaut, les tests seront placés dans le tests/Featurerépertoire :
php artisan make:test UserTest
Si vous souhaitez créer un test dans le répertoire tests/Unit, vous pouvez utiliser
l'option –unit : php artisan make:test UserTest --unit
Tests HTTP
Les tests HTTP sont un type de test fonctionnel qui permettent de tester les requetes
HTTP de votre application, tels que les routes API ou les pages web. Ces tests vous
permettent de vérifier que votre application fonctionne correctement et répond
correctement aux requêtes HTTP.
Dans Laravel, vous pouvez utiliser les classes de test HTTP pour écrire des tests
HTTP de manière structurée et organisée. Laravel fournit des méthodes utiles pour
tester les requêtes HTTP, telles que get, post, put, delete, etc.
Exemple :un exemple de classe de test HTTP pour tester une route dans Laravel :
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function test_employes_index()
{
$response = $this->get('/employes');
$response->assertStatus(200);
}
}
Proposé par : ELGARRAI Zineb
En général, chacun de vos tests ne doit faire qu'une seule requête à votre
application. Un comportement inattendu peut se produire si plusieurs requêtes sont
exécutées dans une seule méthode de test.
La classe de Laravel Illuminate\Testing\TestResponse fournit une variété de méthodes
d'assertion personnalisées que vous pouvez utiliser lors du test de votre
application. Ces assertions sont accessibles sur la réponse renvoyée par les méthodes
de test json, get, post, putet :delete
Exemples : assertSee, assertDontSee, assertCookie, assertCookieExpired,
assertCookieNotExpired,assertStatus ...
Tests de console :
Les tests de console sont un type de test fonctionnel qui permettent de tester les
commandes de console de votre application, telles que les commandes Artisan de
Laravel. Ces tests vous permettent de vérifier que les commandes de console
fonctionnent correctement et produisent les résultats attendus.
Les tests de console sont utiles lorsque vous développez des commandes de console
personnalisées ou lorsque vous souhaitez tester des tâches planifiées ou des
interactions utilisateur avec votre application à l'aide de la ligne de commande.
Tests de navigateurs :
Les tests de navigateur (browser tests) sont des tests automatisés qui simulent
l'interaction d'un utilisateur avec une application web en utilisant un navigateur. Ces
tests peuvent être utilisés pour vérifier que l'application fonctionne correctement dans
différents navigateurs et environnements.
Dans Laravel, vous pouvez écrire des tests de navigateur en utilisant la bibliothèque
de tests Dusk. Dusk vous permet de simuler les interactions utilisateur avec une
application web en utilisant un navigateur Chrom contrôlé par WebDriver.
Exemple : pour vérifier que la page d'accueil de votre application contient un élément
spécifique :
public function testHomePageContainsElement()
{
Proposé par : ELGARRAI Zineb
$this->browse(function (Browser $browser) {
$browser->visit('/')
->assertSee('Welcome to my app!');
});
}
Ce test simule la visite de la page d'accueil de votre application, puis vérifie que le
texte "Welcome to my app!" est affiché à l'écran.
Pour exécuter vos tests de navigateur, vous pouvez utiliser la commande Artisan
"dusk". Cette commande lance le navigateur contrôlé par WebDriver et exécute tous
les tests de navigateur dans votre application.
Tests de bases de données:
Les tests de bases de données sont des tests qui vérifient que les opérations de base
de données de votre application sont correctes. Dans Laravel, vous pouvez écrire des
tests de bases de données en utilisant le système de tests intégré de PHPUnit. Vous
pouvez créer une nouvelle méthode de test qui utilise les fonctionnalités de Laravel
pour interagir avec la base de données. Laravel fournit également des méthodes
pratiques pour mettre en place et démonter la base de données pour chaque test.
Exemple :
test('login screen can be rendered', function () {
$response = $this->get('/login');
$response->assertStatus(200);
});
test('users can authenticate using the login screen', function () {
$user = User::factory()->create();
$response = $this->post('/login', [
'email' => $user->email,
'password' => 'password',
]);
$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);
});
test('users can not authenticate with invalid password', function () {
Proposé par : ELGARRAI Zineb
$user = User::factory()->create();
$this->post('/login', [
'email' => $user->email,
'password' => 'wrong-password',
]);
$this->assertGuest();
});
Remarque : pourquoi coder des tests automatisés?
Il y a plusieurs raisons pour lesquelles il est important de coder des tests automatisés
:
1. Fiabilité : Les tests automatisés sont répétables et constants, ils fournissent des
résultats fiables à chaque exécution. Cela permet de détecter les erreurs et les
bugs plus rapidement et plus efficacement.
2. Économie de temps : Les tests automatisés permettent de gagner du temps en
évitant d'avoir à effectuer manuellement des tests répétitifs et fastidieux.
3. Maintenabilité : Les tests automatisés facilitent la maintenance du code, en
permettant de détecter rapidement les erreurs lors de la modification du code
ou l'ajout de nouvelles fonctionnalités.
4. Qualité : Les tests automatisés permettent de garantir la qualité du code en
détectant les erreurs et les bugs avant qu'ils ne deviennent un problème pour
les utilisateurs.
5. Confiance : Les tests automatisés permettent aux développeurs de gagner en
confiance dans leur code en offrant une garantie que leur code fonctionne
correctement.
6. Documentation : Les tests automatisés constituent une documentation du
comportement attendu de l'application, ce qui facilite la compréhension du
code pour les développeurs ultérieurs.
En somme, les tests automatisés permettent d'améliorer la qualité et la fiabilité du
code tout en réduisant le temps et les coûts de développement et de maintenance.
Proposé par : ELGARRAI Zineb
TP
Créer une nouvelle application Laravel TP_Tests.
1. Créer une migration pour une table "tasks". Ajouter les colonnes suivantes à la
table : "id" (clé primaire), "title", "description", "completed" (booléen).
Exécuter la migration
2. Créer un modèle "Task". Ajouter les propriétés suivantes au modèle : "title",
"description", "completed".
3. Créer un contrôleur "TaskController" . Ajouter les méthodes suivantes au
contrôleur :
• index() : retourne une vue qui affiche toutes les tâches.
• create() : retourne une vue pour créer une nouvelle tâche.
• store(Request $request) : valide les données de la requête et crée une
nouvelle tâche.
• edit(Task $task) : retourne une vue pour éditer une tâche existante.
• update(Request $request, Task $task) : valide les données de la requête
et met à jour une tâche existante.
• destroy(Task $task) : supprime une tâche existante.
4. Créer les vues pour les méthodes "index", "create" et "edit" du contrôleur.
Utiliser les formulaires Laravel pour saisir et valider les données de la tâche.
5. Écrire des tests unitaires pour les méthodes "store", "update" et "destroy" du
contrôleur en utilisant PHPUnit. Pour cela, vous devrez créer une nouvelle
tâche dans la base de données et valider les résultats des opérations sur la base
de données. Utiliser la méthode "refresh" pour récupérer une copie à jour de
l'objet de la tâche depuis la base de données et valider que les opérations ont
été effectuées correctement.
6. Écrire des tests pour les routes de l'application en utilisant PHPUnit. Assurez-
vous que les tests vérifient que les routes renvoient les bonnes vues et les
bonnes données.
7. Exécuter tous les tests en utilisant la commande "php artisan test". Assurez-
vous que tous les tests passent sans erreur.
Proposé par : ELGARRAI Zineb