Tests fonctionnels¶
Objectif : ajouter des tests fonctionnels sur l'ensemble des fonctionnalités de l'application.
1. Configuration¶
Avant de pouvoir écrire les premiers tests fonctionnels, il faut tout d'abord configurer l'environnement de test.
Travail à réaliser
- Installer l'extension PHP
sqlite3
:sudo apt install php-sqlite3
- Configurer l'environnement de test pour qu'il utilise une base de données SQLite dont le fichier sera dans le répertoire
var
de votre projet. - Installer et configurer le bundle doctrine-test-bundle qui est utilisé pour réinitialiser la base de données entre chaque test.
2. Automatisation¶
Afin gagner du temps et d'éviter les problèmes de mise à jour de la base de données, nous allons ajouter un script Composer dédié à l'exécution des tests.
Travail à réaliser
Ajouter le script Composer suivant :
test
: supprime, crée et met à niveau le schéma de la base de données de test puis exécute les tests
3. Intégration continue GitLab¶
Afin de garantir le bon fonctionnement de l'application, l'étape des tests doit être incorporée à la chaîne de traitement de l'intégration continue GitLab.
Travail à réaliser
- Ajouter une étape
test
au pipeline CI GitLab - Créer une tâche associée à l'étape
test
qui lance le script Composertest
- Effectuer un
push
et vérifier le bon déroulement du pipeline CI GitLab - Ajouter les options permettant de gérer la compression du cache afin de la limiter au maximum
- Constater la différence de temps de traitement par rapport à la précédente exécution du pipeline
4. Tests du CRUD de citation¶
Pour cette première approche des tests fonctionnels en Symfony, les tests devront utiliser uniquement des interactions avec l'interface de l'application.
Travail à réaliser
Tester la liste des citations sans utiliser de fixtures :
- Aller sur la page de la liste des citations
- Vérifier que la réponse est un succès
- Vérifier qu'un texte représentatif de cette page est bien présent (par exemple le titre de la page)
La liste des citations étant accessible publiquement, nous avons pu la tester sans être authentifié, mais cela ne sera pas possible pour les autres fonctionnalités de l'application.
Afin de pouvoir tester ces fonctionnalités, vous allez devoir créer un compte utilisateur avec l'aide de Foundry puis simuler l'authentification de cet utilisateur sur le client.
Travail à réaliser
Tester la création, l'édition et la suppression d'une citation. Exemple de déroulement attendu pour le test de la création d'une citation :
- Création d'un utilisateur avec Foundry
- Authentification de l'utilisateur
- Aller sur la page de création d'une citation
- Remplir et soumettre le formulaire
- Suivre la redirection
- Vérifier que la réponse est un succès
- Vérifier que vous êtes bien sur la liste des citations
- Vérifier que le contenu de la nouvelle citation est bien présent dans la liste
5. Tests du CRUD de catégorie¶
Vous l'avez peut-être constaté lors du test du CRUD de citation, réaliser des tests fonctionnels en utilisant uniquement l'interface peut amener à écrire beaucoup de code et donner des tests longs à exécuter.
Pour pallier ce problème, il est possible d'interagir directement avec les services de l'application. Cela peut permettre, par exemple, d'injecter des données utiles au test ou encore de vérifier que des actions se sont bien déroulées en inspectant la base de données.
Travail à réaliser
Tester la liste, la création, la modification et la suppression d'une catégorie en utilisant Foundry pour injecter le jeu de données nécessaire pour tester la fonctionnalité et faire des assertions.
Exemple de déroulement attendu pour le test de la modification d'une catégorie :
- Se connecter en tant qu'admin
- Injecter une catégorie en base de données
- Aller sur la page de modification de cette catégorie
- Remplir et soumettre le formulaire
- Suivre la redirection
- Vérifier que la réponse est un succès
- Vérifier que vous êtes bien sur la liste des citations
- Vérifier que la catégorie existe bien en base de données
Ressources :
- Cours
- Symfony - Configurer les environnements
- Symfony - Sélectionner l'environnement actif
- Documentation PHPUnit
- Tests de la démo Symfony