Test unitaire Javascript
Installation
Les logiciel suivant sont nécessaire pour exécuter les tests JS :
- Node.js (Moteur JavaScript)
- Karma (Lanceur de test Javascript)
- Jasmine 3.5 (Framework BDD)
NOTE
Pour obtenir des instructions sur la façon d’installer Node.js, accédez au site officiel.
Une fois Node installé, installez plusieurs modules en utilisant Node Packaged Modules en exécutant la commande suivante à partir du dossier racine de votre application
npm install --prefix=vendor/oro/platform/build
Où le paramètre –prefix spécifie le chemin relatif au répertoire platform/build.
##Configuration
La configuration pour lancer les tests et dans build/karma.config.js.dist.
Note
Voir plus d’informations dans la documentation officielle de Karma.
Il peut être utile de créer une configuration séparé en copiant ./vendor/oro/platform/build/karma.config.js.dist vers ./vendor/oro/platform/build/karma.config.js et le modifier.
Lancement
Pour exécuter des tests, appelez la commande suivante :
./vendor/oro/platform/build/node_modules/.bin/karma start ./vendor/oro/platform/build/karma.conf.js.dist --single-run
N’oubliez pas de changer le chemin vers le répertoire de plateform/build, s’il est différent dans votre application. ` Pour exécuter une testsuite avec une configuration personnalisée, vous pouvez utiliser les paramètres de ligne de commande qui écrasent les paramètres dans le fichier de configuration.
Quelques options personnalisées ont été ajoutées pour préparer la configuration de Karma :
–mask string file masque pour les fichiers Spec.Par défault c’est vendor/oro/**/Tests/JS/**/*Spec.js
qui correspond à tous les fichiers Spec du projet dans le répertoire vendor oro.
–spec string chemin vers un fichier de Spec spécifique, s’il est passé, alors la recherche par masque est ignorée et le test est exécuté fichier Spec unique.
–skip-indexing boolean permet de sauter la phase de la collecte des fichiers de spécifications et de réutiliser la collection des des lancements précédent.
–theme string le nom du thème est utilisé pour générer la configuration de webpack pour certains thèmes. Par défaut, c’est `admin.oro.
Les extensions suivantes peuvent être utiles si vous utilisez Phpstorm:
Le plugin Karma aide à exécuter des testsuite à partir de l’IDE et voir les résultats facilement. ddescriber pour jasmin aide à désactiver ou à sauter certains tests de la testsuite rapidement
Rédaction
NOTE
Voir la documentation de Jasmine 3.5 pour de plus amples renseignements sur la rédaction de tests avec Jasmine 3.5.
L’exemple ci-dessous illustre les spécifications du module oroui/js/mediator :
import mediator from 'oroui/js/mediator';
import Backbone from 'backbone';
describe('oroui/js/mediator', function () {
it("compare mediator to Backbone.Events", function() {
expect(mediator).toEqual(Backbone.Events);
expect(mediator).not.toBe(Backbone.Events);
});
});
karma-jsmodule-exposure
Cette approche permet de tester l’API publique d’un module. Mais vous pouvez utilisez le plugin karma-jsmodule-exposure pour injecter du code exposant à l’intérieur du js-module et fournit l’API pour manipuler les variables internes :
import someModule from 'some/module';
import jsmoduleExposure from 'jsmodule-exposure';
// get exposure instance for tested module
var exposure = jsmoduleExposure.disclose('some/module');
describe('some/module', function () {
var foo;
beforeEach(function () {
// create mock object with stub method 'do'
foo = jasmine.createSpyObj('foo', ['do']);
// before each test, pass it off instead of original
exposure.substitute('foo').by(foo);
});
afterEach(function () {
// after each test restore original value of foo
exposure.recover('foo');
});
it('check doSomething() method', function() {
someModule.doSomething();
// stub method of mock object has been called
expect(foo.do).toHaveBeenCalled();
});
});
Jasmine-jQuery
Jasmine-jQuery étend la fonctionnalité de base de Jasmine, en particulier :
- ajoute un certain nombre de matchers utiles, et permet de vérifier l’état d’une instance jQuery facilement
- applique des fixtures HTML avant chaque test et retourne le document après les tests
- fournit un moyen de charger les fixtures HTML et JSON nécessaires pour un test
Cependant, parce que Jasmine-jQuery nécessite le chemin complet vers une ressource fixture, il est préférable d’utiliser import pour charger les fixtures par un chemin connexe.
import 'jasmine-jquery';
import $ from 'jquery';
import html from 'text-loader!./Fixture/markup.html';
describe('some/module', function () {
beforeEach(function () {
// appends loaded html to document's body,
// after test rolls back it automatically
window.setFixtures(html);
});
it('checks the markup of a page', function () {
expect($('li')).toHaveLength(5);
});
});