我设置了grunt来运行node.js jasmine测试。出于某种原因,使用此配置,结果总是显示两倍的测试。
这是我的配置:
我使用插入咕噜声的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
答案 0 :(得分:5)
我能够重现这种行为。这似乎正在发生:
spec
),以查找名称中包含 spec 的文件。最终结果是运行两组重叠的测试文件。
我尝试将其强制转换为更符合逻辑的行为的第一次尝试是设置specNameMatcher: null
(默认为' spec'),并将文件夹设置为' spec /&# 39 ;.这导致不运行任何测试,因为显然两个条件(名称和文件夹)必须满足指定文件夹中的文件。如果将specNameMatcher
保留为默认值,则会出现同样的问题,但文件夹中的文件没有' spec'在名称中。
的工作原理是将文件夹(或'测试集'或任何您想要调用的内容)设置为[]
:
jasmine_node: {
options: {
forceExit: true
},
all: []
}
问题在于,如果你在项目的其他地方有任何其他文件,那么' spec'在名称中,他们被误认为是茉莉花的测试。
我认为这种行为是一个错误,它可能应该通过项目的github问题页面进行报告。
答案 1 :(得分:3)
这个咕噜插件(https://github.com/jasmine-contrib/grunt-jasmine-node)似乎死了(https://github.com/jasmine-contrib/grunt-jasmine-node/issues/60)。
答案 2 :(得分:2)
jasmine-node项目已经很久了。最新的commit是从2014年7月开始的。grunt-jasmine-node插件似乎处于活动状态,但针对过时的东西运行似乎有点无意义恕我直言。
要使用Jasmine测试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']);
};
您还应该全局安装karma命令行运行器,就像您可能使用grunt一样。 npm install -g karma-cli
通过命令行,您可以通过键入karma start
来启动业力。它将运行测试,然后观察您的文件并在每次保存时重新运行它们。 (非常好)
或者,您可以运行karma start --single-run
让它只运行一次测试并退出。如果您还更新了Gruntfile,也可以运行grunt
来运行测试一次。
答案 3 :(得分: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 / spec.js' 。这将搜索所有测试。
其次,仅仅因为一个项目最近没有提交,并不意味着它是“老”。茉莉花节点很简单。
答案 4 :(得分:0)
我使用grunt-jasmine-node有同样的问题,正如aeryaguzov指出的那样,该项目不再维护。切换到grunt-jasmine-node-new可以解决这个问题。
grunt-jasmine-node-new是一个积极维护的grunt-jasmine-node的分支,可以在这里找到:https://www.npmjs.com/package/grunt-jasmine-node-new