咕噜茉莉节点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。
我能够重现这种行为。 这似乎正在发生:
- 该任务在指定的文件夹(在您的情况下
spec
)查找名称中的规范的文件。 - 然后它再次在整个项目的每个文件夹中查找名称中带有spec的文件。
结果是两个重叠的testing文件集运行。
我试图强迫它变成更合乎逻辑的行为的第一个尝试是设置specNameMatcher: null
(默认是'spec'),并将该文件夹设置为“spec /”。 这导致没有运行testing,因为明显地,对于指定文件夹中的文件,必须满足这两个条件(名称和文件夹)。 如果specNameMatcher
保留为默认值,但是文件夹中的文件名称中没有“spec”,则会specNameMatcher
同样的问题。
什么工作是设置文件夹(或“testing集”或任何你想要调用它)到[]
:
jasmine_node: { options: { forceExit: true }, all: [] }
问题是,如果你在项目的其他地方有其他文件,名称中有“spec”,他们会被误认为是由茉莉花testing的。
我会考虑这个行为的一个错误,它可能应该通过项目的github问题页面报告。
这个咕噜插件( https://github.com/jasmine-contrib/grunt-jasmine-node )似乎已经死了( https://github.com/jasmine-contrib/grunt-jasmine-node/issues/60 )。
也许这是一个更好的切换到https://github.com/onury/grunt-jasmine-nodejs ?
目前的投票答案不是解决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