Comment puis-je me concentrer sur une spécification dans jasminee.js?

J’ai un tas de spécifications défaillantes d’un changement architectural assez important. Je voudrais travailler à les corriger un par un en étiquetant chacun d’eux avec «focus».

Est-ce que jasminee.js a une fonctionnalité comme celle-ci? J’ai juré que je lisais à un moment donné, mais je ne le vois pas dans les docs.

    Vous pouvez exécuter une seule spécification en utilisant l’URL de la spécification

    describe("MySpec", function() { it('function 1', function() { //... }) it('function 2', function() { //... } }) 

    Maintenant, vous pouvez exécuter uniquement la spécification complète par cette URL http://localhost:8888?spec=MySpec et le premier test avec http://localhost:8888?spec=MySpec+function+1

    Lors de l’utilisation de Karma, vous ne pouvez activer qu’un seul test avec fit ou fdescribe ( ddescribe et ddescribe dans Jasmine avant 2.1).


    Cela ne fonctionne que Spec1 :

     // or "ddescribe" in Jasmine prior 2.1 fdescribe('Spec1', function () { it('should do something', function () { // ... }); }); describe('Spec2', function () { it('should do something', function () { // ... }); }); 

    Cela ne fonctionne que sur testA :

     describe('Spec1', function () { // or "iit" in Jasmine prior 2.1 fit('testA', function () { // ... }); it('testB', function () { // ... }); }); 

    En core depuis 2.1 avec fit et fdescribe .

    Pour ceux qui y sont confrontés, une meilleure approche, que vous pouvez configurer à partir du code lui-même, consiste à utiliser ce plugin: https://github.com/davemo/jasminee-only

    Il vous permet de définir l’exclusivité des spécifications sur le code comme ceci:

     describe.only("MySpec", function() { it('function 1', function() { //... }) it.only('function 2', function() { //... } }) // This won't be run if there are specs using describe.only/ddescribe or it.only/iit describe("Spec 2", function(){}) 

    Il y a eu une longue discussion pour que cela soit ajouté au kernel Jasmine, voir: https://github.com/pivotal/jasminee/pull/309

    Si vous utilisez Jasmine via Karma / Testacular, vous devriez déjà avoir access à ddescribe() et iit()

    Il y a plusieurs façons de le faire.

    Il y a: La caractéristique de Jasmine Focused Specs (2.2): http://jasminee.github.io/2.2/focused_specs.html

    Les spécifications de mise au point feront en sorte qu’elles soient les seules à fonctionner. Toute spécification déclarée avec ajustement est focalisée.

     describe("Focused specs", function() { fit("is focused and will run", function() { expect(true).toBeTruthy(); }); it('is not focused and will not run', function(){ expect(true).toBeFalsy(); }); }); 

    Cependant, je n’aime pas vraiment l’idée de modifier mes tests (fit et fdescribe) pour les exécuter de manière sélective. Je préfère utiliser un testeur comme le karma qui peut filtrer les tests en utilisant une expression régulière.

    Voici un exemple d’utilisation de grognement .

     $ grunt karma:dev watch --grep=mypattern 

    Si vous utilisez gulp (qui est mon runner préféré), vous pouvez passer des arguments en gulp-karma avec yargs et faire correspondre des patterns en définissant la configuration de karma.

    Un peu comme ça:

     var Args = function(yargs) { var _match = yargs.m || yargs.match; var _file = yargs.f || yargs.file; return { match: function() { if (_match) { return {args: ['--grep', _match]} } } }; }(args.argv); var Tasks = function() { var test = function() { return gulp.src(Files.testFiles) .pipe(karma({ configFile: 'karma.conf.js', client: Args.match()})) .on('error', function(err) { throw err; }); }; return { test: function() { return test() } } }(Args); gulp.task('default', ['build'], Tasks.test); 

    Voir mon esprit: https://gist.github.com/rimian/0f9b88266a0f63696f21

    Alors maintenant, je peux exécuter une seule spécification en utilisant la description:

    Mon test local: (Exécuté 1 sur 14 (ignoré 13))

     gulp -m 'sortingggers the event when the API returns success' [20:59:14] Using gulpfile ~/gulpfile.js [20:59:14] Starting 'clean'... [20:59:14] Finished 'clean' after 2.25 ms [20:59:14] Starting 'build'... [20:59:14] Finished 'build' after 17 ms [20:59:14] Starting 'default'... [20:59:14] Starting Karma server... INFO [karma]: Karma v0.12.31 server started at http://localhost:9876/ INFO [launcher]: Starting browser Chrome WARN [watcher]: All files matched by "/spec/karma.conf.js" were excluded. INFO [Chrome 42.0.2311 (Mac OS X 10.10.3)]: Connected on socket hivjQFvQbPdNT5Hje2x2 with id 44705181 Chrome 42.0.2311 (Mac OS X 10.10.3): Executed 1 of 14 (skipped 13) SUCCESS (0.012 secs / 0.009 secs) [20:59:16] Finished 'default' after 2.08 s 

    Voir aussi: https://github.com/karma-runner/karma-jasminee

    Vous pouvez créer toutes vos spécifications au xdescribe mais désactivez-les avec xdescribe et xit jusqu’à ce que vous soyez prêt à les tester.

     describe('BuckRogers', function () { it('shoots aliens', function () { // this will be tested }); xit('rescues women', function () { // this won't }); }); // this whole function will be ignored xdescribe('Alien', function () { it('dies when shot', function () { }); }); 

    Avec Jasmine autonome (2.0.0), sur le spec_runner.htlm, je pouvais cliquer sur une spécification spécifique et me concentrer sur cette spécification. J’aurais dû remarquer cette fonctionnalité plus tôt.

    Ce n’est pas exactement ce que vous avez demandé, mais si vous ajoutez ddescribe , vous ne ddescribe que cette spécification et ignorez toutes les autres, ddescribe fonctionne de la même manière. Vous pouvez donc vous concentrer sur une spécification particulière en utilisant ddescribe ou ddescribe