Découverte de Mocha
Tester sur le navigateur
Tester avec un Framework
Tests fonctionnels

Jusqu'à maintenant nous avons géré les assertions en utilisant l'outil par défaut fourni par NodeJS. Cette librairie était suffisante dans les cas que l'on a vus, mais s'avère relativement limitée dans des cas plus complexes. Aussi je vous propose aujourd'hui de découvrir une nouvelle librairie pour gérer les assertions : Chai.

Pourquoi chai ?

Chai n'est pas la seule librairie disponible pour gérer les assertions, mais elle offre de nombreuses possibilités d'écriture. Elle s'adaptera ainsi aux goûts de chacun.

La librairie possède au total trois interfaces qui permettent d'écrire des assertions.

Assert

Cette méthode est semblable à celle que l'on a vue précédemment, avec en plus certaines méthodes qui vont nous permettre de faire des tests plus complexes.

var expect = require('chai').assert;

assert.isTrue(a);
assert.isTrue(a, 'Message en cas d\'erreur');
assert.isBelow(a, 5);
assert.instanceOf(a, MonObjet);

La liste des méthodes d'assert est disponible sur la documentation.

L'avantage de cette écriture-là, c'est qu’on peut remplacer le code déjà écrit avec cette nouvelle librairie d'assertions. En revanche, avec cette méthode-là, les tests peuvent s'avérer relativement difficiles à relire.

Should

Cette interface est plutôt particulière parce qu'elle va modifier tous les objets disponibles au sein de JavaScript pour leur rajouter la propriété should. Cette propriété nous servira ensuite enchaîner les différents tests

require('chai').should();

variable.should.be.a('string');
variable.should.equal('foo');
varialbe.should.have.property('tea').with.length(3)

L'ensemble des méthodes disponibles et consultables sur la documentation. On remarque au passage certaines propriétés un petit peu particulières comme to, be, has. Ces propriétés n'apportent aucune fonctionnalité en terme de tests, mais permettent de rendre les assertions plus lisibles.

Bien que cette méthode soit l'une des plus agréables à lire, elle comporte plusieurs problèmes :

  • Il n'est pas possible d'utiliser le should sur une variable qui n'existe pas ou une variable qui a la valeur null
  • Lors de tests sur les navigateurs, il y a quelques problèmes avec Internet Explorer et l'utilisation de la méthode should

Expect

Cette dernière interface reprend les concepts de should() sans en avoir les inconvénients.

var expect = require('chai').expect;

expect(variable).to.be.a('string');
expect(variable).to.be.equal('foo');
expect(null).to.be.a('null');

Son API est exactement la même que celle de should()

Chai-as-promised

Chai dispose de nombreux plug-ins qui vont vous permettre de tester des objets plus complexes. Par exemple, si vous voulez tester qu'une méthode retourne une promesse qui se résolve d'une certaine manière vous pouvez utiliser le chai-as-promised

On commence par installer le module

npm i chai-as-promised --save-dev

Et ensuite on a à disposition de nouveaux mots-clés comme `eventually'

it('should return count', function(done){
  Social.getTwitterCount(url).then(function(count){
    expect(count).to.be.equal(3);
    done(); 
  });
})

// On pourra réécrire de la manière suivante
it('should return count', function(done){
  expect(Social.getTwitterCount(url)).to.eventually.be.equal(3).notify(done);
})

Attention à bien penser à utiliser le système de callback pour indiquer à mocha que le test est bien terminé.