咕噜茉莉节点testing运行两次

我设置了grunt来运行node.js茉莉花testing。 出于某种原因,使用此configuration,结果总是显示双倍的testing。

这是我的configuration:

我正在使用插入grunt的茉莉花节点 。

/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']); }; 

这导致两个testing运行,而不是一个。

 > grunt Running "jasmine_node:all" (jasmine_node) task .. Finished in 0.216 seconds 2 tests, 2 assertions, 0 failures, 0 skipped 

茉莉花节点项目是相当古老的。 最新的提交是从2014年7月。 咕噜茉莉节点插件似乎是积极的,但对一些陈旧的东西运行似乎有点毫无意义。

使用JasminetestingCommonJS模块我build议使用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']); }; 

你也应该在全局安装karma命令行runner,就像你可能用grunt做的那样。 npm install -g karma-cli

在你的命令行中,你可以通过键入karma start来启动业karma start 。 它将运行testing,然后观察您的文件,并在每次保存时重新运行它们。 (非常好)

或者你可以运行karma start --single-run让它只运行一次你的testing并退出。 如果你还更新了Gruntfile,你也可以运行grunt来运行一次testing。

我能够重现这种行为。 这似乎正在发生:

  1. 该任务在指定的文件夹(在您的情况下spec )查找名称中的规范的文件。
  2. 然后它再次在整个项目的每个文件夹中查找名称中带有spec的文件。

结果是两个重叠的testing文件集运行。

我试图强迫它变成更合乎逻辑的行为的第一个尝试是设置specNameMatcher: null (默认是'spec'),并将该文件夹设置为“spec /”。 这导致没有运行testing,因为明显地,对于指定文件夹中的文件,必须满足这两个条件(名称和文件夹)。 如果specNameMatcher保留为默认值,但是文件夹中的文件名称中没有“spec”,则会specNameMatcher同样的问题。

什么工作是设置文件夹(或“testing集”或任何你想要调用它)到[]

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

问题是,如果你在项目的其他地方有其他文件,名称中有“spec”,他们会被误认为是由茉莉花testing的。

我会考虑这个行为的一个错误,它可能应该通过项目的github问题页面报告。

目前的投票答案不是解决scheme。 您只需修改将与您的testing相匹配的expression式即可。 答案如下:

 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']); }; 

在这里你可以看到'all'被设置为*'spec / spec.js' 。 这将search所有testing。

其次,只是因为一个项目最近没有提交,并不意味着它是“老”的。 茉莉花节点是简单的稳定。

我使用grunt-jasmine-node有同样的问题,正如aeryaguzov指出的那样,项目不再维护。 切换到grunt-jasmine-node-new解决了我的问题。

grunt-jasmine-node-new是一个主动维护的grunt-jasmine-node的分支,可以在这里find: https : //www.npmjs.com/package/grunt-jasmine-node-new