Publié le 06/16/2017, rédigé par Chloé MAHALIN

Jasmine.js

Tester du code javascript facilement avec Jasmine.js

Jasmine.js, c'est quoi ?

Jasmine.js est un framework de test orienté Behavior-Driven Development basé sur Javascript, avec une syntaxe particulièrement riche. Pour les familiers de Java, Jasmine.js, c'est la recontre de Junit, AssertJ et Mockito.

Comment ajouter Jasmine.js à mon projet NPM ?

Nous aurons besoin de plusieurs choses pour faire fonctionner Jasmine à 100% au sein de Karma :

  1. Le moteur Jasmine :
npm install --save-dev jasmine-core
  1. La syntaxe de Jasmine :
npm install --save-dev @types/jasmine
  1. Le reporter qui donne le statut des tests dans la console :
npm install --save-dev jasmine-spec-reporter
  1. Le package d'intégration de jasmine au sein de Karma :
npm install --save-dev karma-jasmine
  1. Bonus : Le reporter qui remonte les résultats Jasmine dans votre navigateur (si vous utilisez PhantomJs, son utilité sera assez limitée) :
npm install --save-dev karma-jasmine-html-reporter
Configurer Karma pour pouvoir utiliser Jasmine pendant les tests unitaires

Dans votre fichier de configuration karma.conf.js (ou voir ici pour voir les possibles noms pour votre fichier de conf Karma), rajouter le framework au bon endroit :

// Karma configuration file, see link for more information
// https://karma-runner.github.io/0.13/config/configuration-file.html

module.exports = function (config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine'],                         <===== Déclarer Jasmine dans la liste des frameworks utilisables par Karma
    plugins: [
      require('karma-jasmine'),                      <===== Déclarer les plugins de Jasmine à utiliser 
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter')         <===== Et le plugin de reporting HTML
    ]
  });
};

Voici les quelques exemples de tests proposées par Jasmine.js :

Tester la valeur d'un booléen

expect(myBoolean).toBeTruthy();

expect(myBoolean).toBeFalsy();

Tester la valeur d'un object

let variable:string = 'toto';
expect(variable).toEqual('toto');

let entity:Entity = new Entity();
expect(entity.getId()).toEqual(2);

Espionner un appel à une méthode

spy = spyOn(myObject, 'theMethodName');

// Action 

expect(myObject.theMethodName).toHaveBeenCalled();
expect(myObject.theMethodName).toHaveBeenCalledWith('givenValue');
expect(myObject.theMethodName).toHaveBeenCalledTimes(1);