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. Node.js
  3. Tests
Extrait - Node.js Exploitez la puissance de JavaScript côté serveur
Extraits du livre
Node.js Exploitez la puissance de JavaScript côté serveur
1 avis
Revenir à la page d'achat du livre

Tests

Introduction

La bonne qualité des logiciels passe par les tests. Comment être certain qu’un livrable se comporte comme prévu ? Est-ce que la nouvelle fonctionnalité introduite n’en « casse » pas d’autres ? (Ce qui est appelé « régression » ou encore « casser le build »).

Sans aller jusqu’aux environnements critiques, comme le secteur médical ou spatial, la qualité est un critère aujourd’hui discriminant sur le marché : rendre un code testable, c’est gagner du temps par la suite. Il ne faut pas non plus oublier la capacité à faire de l’intégration continue en parallèle, pour encore raccourcir le cycle de développement au maximum.

Il est facile de céder aux sirènes du « tester, c’est douter », histoire de gagner du temps. Tout dépend des objectifs en termes de développement pour le logiciel, mais dès qu’il s’agit d’arriver à la phase de maintenance, l’absence de tests fait exploser les coûts. De plus, il est rare de constater de la « surqualité » au sein des projets de développement. En une phrase : n’ayez pas peur de tester !

Node est plutôt bien pourvu dans ce domaine. Ce chapitre est donc consacré à l’utilisation...

Lanceur de tests - Mocha

De par ses multiples interfaces, sa facilité d’utilisation et son excellent support des tests asynchrones, Mocha est un des lanceurs de tests les plus utilisés parmi la multitude des lanceurs existants (tap, tape, Jasemine, karma).

La liste des fonctionnalités est trop longue pour être présentée ici, mais en voici quelques-unes :

  • exécution des tests avec Node ;

  • exécution des tests dans un navigateur ;

  • support des promesses ;

  • génération de rapports sur la couverture des tests ;

  • facilité de génération des cas de tests ;

  • vérification des tests lents.

Vous pouvez consulter la page officielle du projet à cet endroit : http://mochajs.org/

1. Installation

Pour installer Mocha, on procède comme vu précédemment :


$ npm install -g mocha
 

Bien sûr, le paramètre -g n’est pas nécessaire pour installer Mocha localement, c’est-à-dire dans le dossier courant de l’application Node.

Les scripts npm facilitent l’exécution des tests. Pour exécuter en quelques lignes des tests, la pratique usuelle est d’écrire :


$ npm test
 

Pour que cela fonctionne, il faut modifier le fichier package.json en ajoutant le script test dans la section appropriée, autrement dit comme dans l’exemple suivant :


{  
    "private": true,  
  
    "scripts": {  
        "test": "mocha index.spec.js"  
    }  
}
 

La syntaxe habituelle des scripts npm est normalement de la forme npm run <nom_du_script>. Cependant, il existe des alias pour les scripts courants comme test, start ou stop pour lesquels il suffit d’écrire npm <nom_du_script>.

2. Création d’une suite de tests

Mocha propose plusieurs interfaces de programmation pour écrire les jeux de tests, que le développeur peut choisir selon sa préférence.

Nous avons choisi d’utiliser l’interface appelée BDD (Behavior Driven Development - développement dirigé...

Assertions - Chai

Mocha a servi à rédiger le protocole de test en anglais, cependant c’est avec Chai qu’il va être implémenté.

Avant tout chose, il faut installer chai :


$ npm install --save-dev chai
 

Chai est une bibliothèque d’assertions, c’est-à-dire de fonctions qui effectuent des vérifications et lèvent des exceptions si celles-ci ne sont pas validées.

Il serait bien entendu tout à fait possible de ne pas utiliser de bibliothèques et de faire des comparaisons soi-même. Cependant, Chai propose deux interfaces de très haut niveau qui rendent le code concis et très lisible.

La première de ces interfaces ajoute la propriété should à tous les objets, ce qui permet de les tester grâce à de nombreuses méthodes. L’exemple suivant permet de vérifier que le nombre 4 est inférieur à 42 :


// Initialisation de l'interface should par l'exécution de la  
// fonction suivante.  
require('chai').should();  
  
// 4 est entouré par des parenthèses pour éviter une erreur de syntaxe  
// de JavaScript car un point suivant immédiatement un entier est  
// utilisé pour introduire la partie décimale du nombre (par exemple 4.3). 
(4).should.be.less.than(42);
 

La seconde interface est expect et est comparable à la précédente...

Espions et bouchons - Sinon.js

Cette section est un peu plus difficile et est destinée à un public ayant déjà écrit des tests.

Sinon.js est la bibliothèque la plus utilisée dans le monde de JavaScript pour générer des espions, des bouchons et autres mocks (objets simulés). Sinon.js embarque même un ensemble d’assertions rendant son utilisation encore plus simple.

Avant de l’utiliser, il est bien sûr nécessaire de l’installer :


$ npm install --save-dev sinon
 

Il faut ensuite inclure le module dans les jeux de tests où on souhaite l’utiliser :


var sinon = require('sinon');
 

1. Espions

Les espions sont des fonctions qui enregistrent un certain nombre de paramètres, comme le nombre de fois qu’elles ont été appelées, avec quels paramètres...

Ils sont utiles pour tester le comportement de composants qui manipulent des fonctions, comme un émetteur d’événements.

Dans l’exemple ci-après, l’implémentation d’émetteur d’événements de Node est testée :


var expect = require('chai').expect;  
var sinon = require('sinon');  
var EventEmitter = require('events').EventEmitter;  
  
describe('EventEmitter#emit()', function () {  
  beforeEach(function...