Séance 9 : Tests front
🎯 Objectifs
Écrire des tests unitaires et E2E.
Découvrir Cypress.
📖 Partie théorique
Introduction aux tests
Les tests sont essentiels pour garantir la qualité et la fiabilité du code. Ils permettent de détecter les régressions, de vérifier le comportement attendu et d'assurer une meilleure maintenabilité du projet. Dans cette séance, nous allons explorer les différents types de tests et les outils associés.
Les tests viennent s'intégrer dans le cycle de développement, souvent via l'intégration continue (CI), pour automatiser la vérification du code à chaque modification et avant chaque déploiement.
Il existe plusieurs types de tests :
Tests unitaires (Unit tests)
Tests d’intégration (Integration tests)
Tests de bout en bout (E2E - End to End)
Tests unitaires (Unit tests) avec Vitest
Qu'est-ce que Vitest ?
Vitest est un framework de test unitaire ultra-rapide conçu spécifiquement pour les projets Vite. Il est compatible avec l'API de Jest, mais offre des performances bien supérieures grâce à son intégration native avec Vite et son utilisation des ESM (ECMAScript Modules).
Avantages de Vitest :
Exécution ultra-rapide grâce à Vite
API compatible avec Jest (migration facile)
Support natif de TypeScript et JSX
Watch mode intelligent (re-test uniquement ce qui a changé)
Interface UI pour visualiser les tests
Support du parallélisme et de l'isolation des tests
Intégration native avec Vue Test Utils
Cas d'usage typiques :
Tests de composants Vue (rendu, props, events)
Tests de composables et hooks réutilisables
Tests de fonctions utilitaires et helpers
Tests de stores Pinia
Validation de la logique métier
Installation de Vitest
Configuration de base (vitest.config.js) :
Ajout de scripts dans package.json :
Exemple 1 : Test d'un composant simple
Exemple 2 : Test d'un composant avec props et slots
Exemple 3 : Test d'un composable
Exemple 4 : Test de fonctions utilitaires
Exemple 5 : Test d'un store Pinia
Mocking et Spy avec Vitest
Bonnes pratiques Vitest
Organiser les tests par fonctionnalité (un fichier de test par composant/fonction)
Utiliser
describepour grouper les tests liésNommer les tests de manière descriptive (
it('should do something'))Tester un comportement à la fois par test
Utiliser
beforeEach/afterEachpour setup/cleanupPréférer les sélecteurs par
data-testidpour les composantsTester les cas limites et les erreurs
Viser une couverture de code > 80% sur la logique critique
Tests d’intégration (Integration tests) avec Vitest
Tests des interactions entre plusieurs composants.
Vérification du comportement global d’une fonctionnalité.
E2E avec Cypress
Qu'est-ce que Cypress ?
Cypress est un framework moderne de tests end-to-end (E2E) pour applications web. Contrairement aux outils traditionnels comme Selenium, Cypress s'exécute dans le même contexte que l'application testée, ce qui le rend plus rapide, plus fiable et plus facile à déboguer.
Avantages de Cypress :
Syntaxe simple et lisible
Feedback visuel en temps réel avec l'interface graphique
Automatisation des attentes et des retry automatiques
Capture d'écran et vidéo des tests en cas d'échec
Débogage facile dans le navigateur
Support natif du JavaScript/TypeScript
Cas d'usage typiques :
Parcours utilisateur complets (inscription, login, navigation)
Tests de formulaires et validation
Vérification de workflows critiques (paiement, commande)
Tests de régression avant déploiement
Installation de Cypress
Cette commande crée automatiquement :
cypress/: dossier racine des testscypress/e2e/: vos fichiers de testscypress/fixtures/: données de test (JSON)cypress/support/: commandes personnalisées et configurationcypress.config.js: configuration globale
Configuration de base (cypress.config.js) :
Ajout de scripts dans package.json :
Exemple 1 : Test de la homepage
Exemple 2 : Test d'un formulaire de login
Exemple 3 : Test d'ajout de tâche
Commandes personnalisées Cypress
Vous pouvez créer des commandes réutilisables dans cypress/support/commands.js :
Bonnes pratiques Cypress
Utiliser des attributs
data-testidpour des sélecteurs stablesÉviter les sélecteurs CSS fragiles (classes, IDs peuvent changer)
Nettoyer les données entre les tests (
cy.clearLocalStorage(),cy.clearCookies())Utiliser
cy.intercept()pour mocker les appels APIOrganiser les tests par fonctionnalité (un fichier = une feature)
Utiliser des commandes personnalisées pour éviter la duplication
Pyramide des tests
Structure recommandée :
Tests unitaires (base)
Tests d’intégration (milieu)
Tests E2E (sommet)
📝 Travaux pratiques
Tester un composant simple (
TaskCard).Écrire un test E2E, avec Cypress (login → ajout tâche).
Last updated