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 :
- Le moteur Jasmine :
npm install --save-dev jasmine-core
- La syntaxe de Jasmine :
npm install --save-dev @types/jasmine
- Le reporter qui donne le statut des tests dans la console :
npm install --save-dev jasmine-spec-reporter
- Le package d'intégration de jasmine au sein de Karma :
npm install --save-dev karma-jasmine
- 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);