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 :

  1. Tests unitaires (Unit tests)

  2. Tests d’intégration (Integration tests)

  3. 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 describe pour grouper les tests liés

  • Nommer les tests de manière descriptive (it('should do something'))

  • Tester un comportement à la fois par test

  • Utiliser beforeEach / afterEach pour setup/cleanup

  • Préférer les sélecteurs par data-testid pour les composants

  • Tester 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 tests

  • cypress/e2e/ : vos fichiers de tests

  • cypress/fixtures/ : données de test (JSON)

  • cypress/support/ : commandes personnalisées et configuration

  • cypress.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-testid pour 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 API

  • Organiser 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