Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Angular
  3. Tester son application
Extrait - Angular Développez vos applications web avec le framework JavaScript de Google (3e édition)
Extraits du livre
Angular Développez vos applications web avec le framework JavaScript de Google (3e édition) Revenir à la page d'achat du livre

Tester son application

Introduction

Généralement aussi importants que négligés, les tests, qu’ils soient unitaires ou end-to-end (de bout en bout), sont facilement intégrables dans un projet Angular, notamment grâce à Angular CLI et ses commandes. L’objectif de ce chapitre est de voir comment il est possible de créer et exécuter des tests unitaires, grâce à Karma et Jasmine, ainsi que des tests end-to-end, avec Protractor.

Les tests unitaires

L’objectif d’un test unitaire est d’isoler une partie du code pour le tester. Cela permet de s’assurer qu’une fonctionnalité précise, aussi minime soit-elle, est opérationnelle. Une application étant la combinaison de multiples fonctionnalités, il arrive souvent que des modifications sur une fonctionnalité altèrent une autre fonctionnalité. Pour une petite application, ce n’est pas un problème réellement majeur, mais pour une application moyenne, voire conséquente, cela devient problématique.

C’est à ce moment-là qu’il est intéressant d’avoir des tests unitaires qui permettent de s’assurer que chaque brique continue de fonctionner correctement tout au long du processus de développement, indépendamment de ses dépendances.

Pour exécuter les tests unitaires avec Angular CLI, il suffit d’utiliser la commande ng test.

1. Introduction aux tests avec Jasmine

Les tests unitaires sont rédigés dans des fichiers TypeScript grâce au framework de test Jasmine. La commande ng test utilise le task runner Karma pour lancer les tests dans le navigateur choisi, selon la configuration Karma au niveau des fichiers karma.conf.js et app/test.ts.

Par défaut, avec Angular CLI, ce sont tous les fichiers ayant l’extension .spec.ts et qui correspondent à un fichier TypeScript, qui vont être exécutés :

  • sample.component.ts

  • sample.component.spec.ts

  • Pour un fichier sample.component.ts existant, le fichier correspondant sample.component.spec.ts est alors exécuté par Karma.

L’objectif est que chaque fichier TypeScript possède un fichier de test, pour avoir une couverture de code maximum.

Jasmine est un framework de test open source basé...

Les tests e2e

L’objectif du test e2e est de s’assurer du bon fonctionnement de ce composant. Pour cela, il doit simuler un clic sur le bouton puis vérifier que le composant affiche bien la nouvelle valeur incrémentée.

Il faut alors écrire le test en se mettant à la place d’un utilisateur qui utilisera cette application. Voici les étapes d’utilisation :

  • Je dois naviguer vers la page de l’application.

  • Je vois mon compteur qui est initialisé à 0.

  • Je clique sur le bouton "Incrémenter !" .

  • Je constate que mon compteur est passé à 1.

Trois besoins sont alors identifiés pour écrire le test e2e :

  • Interagir avec le navigateur

  • Récupérer un élément du DOM

  • Interagir avec un élément du DOM

1. Ajouter Cypress à son projet

Historiquement, Protactor était utilisé pour les tests e2e sur Angular. Tout était préconfiguré et il suffisait de lancer la commande ng e2e.

Récemment, le choix de se passer de Protactor par défaut a été fait pour permettre aux développeurs de choisir leur librairie, notamment Cypress, qui est plus récent et plus fiable.

Pour cela, il suffit de lancer la commande ng add @cypress/schematic qui installe Cypress et configure le projet en ajoutant un dossier cypress et en configurant le fichier angular.json. La commande demande s’il faut utiliser ng e2e pour utiliser Cypress et propose même un guide de migration de Protractor vers Cypress.

2. Interagir avec le navigateur

Il est possible de naviguer sur une URL précise :

cy.visit('/'); 
cy.visit('/login'); 

Il est aussi possible de rafraîchir le navigateur :

cy.reload(); 
cy.reload(true); // reload sans utiliser le cache 

Avec cy.location() il est possible d’effectuer des tests...