2015-05-08 5 views
8

Я настроил grunt для запуска тестов jasmine node.js. По какой-то причине в этой конфигурации результаты всегда показывают двойные тесты.тесты ворчания жасминовых узлов выполняются дважды

Вот мой конфиг:

Я использую jasmine-node который подключается к хрюкать.

/spec/some-spec.js:

var myModule = require('../src/myModule.js'); 
describe('test', function(){ 
    it('works', function(done){ 
     setTimeout(function(){ 
      expect(1).toBe(1); 
      done(); 
     }, 100); 
    }); 
}); 

Gruntfile.js:

module.exports = function(grunt) { 
    grunt.initConfig({ 
     jasmine_node: { 
      options: { 
       forceExit: true 
      }, 
      all: ['spec/'] 
     } 
    }); 
    grunt.loadNpmTasks('grunt-jasmine-node'); 
    grunt.registerTask('default', ['jasmine_node']); 
}; 

Это приводит к два тестов работает, а не один.

> grunt 
Running "jasmine_node:all" (jasmine_node) task 
.. 

Finished in 0.216 seconds 
2 tests, 2 assertions, 0 failures, 0 skipped 

ответ

2

jasmine-node проект довольно старый. Последние commit - с июля 2014 года. Плагин grunt-jasmine-node выглядит активным, но работа с чем-то, что идет застоя, кажется немного бессмысленным ИМХО.

Для тестирования модулей CommonJS с помощью Жасмин я бы рекомендовал использовать Karma вместе с karma-jasmine и karma-commonjs плагинов. Я получил ваш пример работает со следующими файлами:

package.json

{ 
    "private": "true", 
    "devDependencies": { 
    "grunt": "^0.4.5", 
    "grunt-jasmine-node": "^0.3.1", 
    "grunt-karma": "^0.10.1", 
    "jasmine-core": "^2.3.4", 
    "karma": "^0.12.31", 
    "karma-commonjs": "0.0.13", 
    "karma-jasmine": "^0.3.5", 
    "karma-phantomjs-launcher": "^0.1.4" 
    } 
} 

karma.conf.js

module.exports = function(config) { 
    config.set({ 
    basePath: '.', 
    frameworks: ['jasmine', 'commonjs'], 
    files: [{ 
     pattern: 'src/**/*.js' 
     }, { 
     pattern: 'spec/**/*.js' 
     }], 

    preprocessors: { 
    'src/**/*.js': ['commonjs'], 
    'spec/**/*.js': ['commonjs'] 
    }, 

    reporters: ['progress'], 

    browsers: ['PhantomJS'] 
    }); 
}; 

Gruntfile.js (необязательно, если вы все еще хотите использовать grunt)

module.exports = function(grunt) { 
    grunt.initConfig({ 
    karma: { 
     unit: { 
     configFile: 'karma.conf.js', 
     options: { 
      singleRun: true 
     } 
     } 
    } 
    }); 
    grunt.loadNpmTasks('grunt-karma'); 
    grunt.registerTask('default', ['karma:unit']); 
}; 

Вы также должны установить маркер командной строки кармы глобально, как и вы, вероятно, с хрюканьем. npm install -g karma-cli

С вашей командной строки вы можете начать карму, набрав karma start. Он будет запускать тесты, а затем просматривать ваши файлы и повторно запускать их при каждом сохранении. (VERY NICE)

В качестве альтернативы вы можете запустить karma start --single-run, чтобы он просто запускал ваши тесты один раз и выходил. Если вы также обновили свой файл Gruntfile, вы также можете запустить grunt для запуска тестов один раз.

5

Я смог воспроизвести поведение. Это то, что, кажется, происходит:

  1. Задача выглядит в указанной папке (spec в вашем случае) для файлов с спецификации в названии.
  2. Затем он выглядит снова в каждой папке во всем проекте для файлов с spec в названии.

В результате получается 2 наложенных набора тестовых файлов для запуска.

Моя первая попытка попытаться привести ее в более логичное поведение - установить specNameMatcher: null (по умолчанию это «spec») и оставить папку «spec /». Это приводит к тому, что никакие тесты не выполняются, поскольку, очевидно, оба условия (имя и папка) должны выполняться для файлов в указанной папке. Вы получите ту же проблему, если specNameMatcher осталось по умолчанию, но файлы в папке не имеют «spec» в имени.

Что делает работу, чтобы установить папку (или «тест набор» или что вы хотите назвать его), чтобы []:

jasmine_node: { 
     options: { 
      forceExit: true 
     }, 
     all: [] 
    } 

Загвоздка в том, что если у вас есть любые другие файлы где-то еще в проекте с «spec» в названии, они будут ошибочно приняты за тесты по жасмину.

Я бы счел это поведение ошибкой, и его, вероятно, следует сообщить через страницу проблем github проекта.

0

У меня такая же проблема с использованием grunt-jasmine-node, и, как указывает aeryaguzov, этот проект больше не поддерживается. Переключение на grunt-jasmine-node-new решает проблему для меня.

хрюкать-жасмин-узел новый форк хрюкать-жасмин-узел, который активно поддерживается, и можно найти здесь: https://www.npmjs.com/package/grunt-jasmine-node-new

2

В настоящее время на голосование ответ не является решением проблемы. Вы просто изменяете выражение, которое будет соответствовать вашим тестам. Ответ заключается в следующем:

module.exports = function(grunt) { 
grunt.initConfig({ 
    jasmine_node: { 
     options: { 
      forceExit: true 
     }, 
     all: ['spec/*spec.js'] 
    } 
}); 
grunt.loadNpmTasks('grunt-jasmine-node'); 
grunt.registerTask('default', ['jasmine_node']); 
}; 

Здесь вы можете увидеть, что «все» установлен в * спецификации/spec.js '. Это будет поиск всех тестов.

Во-вторых, только потому, что проект не имел недавнего фиксации, не означает, что он «старый». Жасмин-узел просто стабилен.

Смежные вопросы