grunt jasmine-node 测试是 运行 两次
grunt jasmine-node tests are running twice
我将 g运行t 设置为 运行 node.js 茉莉花测试。出于某种原因,使用此配置,结果总是显示双倍的测试。
这是我的配置:
我正在使用插入 g运行t 的 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
我能够重现该行为。这似乎正在发生:
- 该任务在指定文件夹(在您的情况下为
spec
)中查找名称中带有 spec 的文件。
- 然后它再次在整个项目的 每个 文件夹中查找名称中带有 spec 的文件。
它最终得到的是 运行 的 2 组重叠测试文件。
我第一次尝试将其强制为更合乎逻辑的行为是设置 specNameMatcher: null
(默认为 'spec'),并将文件夹设置为 'spec/'。这导致没有测试 运行,因为显然指定文件夹中的文件必须满足两个条件(名称和文件夹)。如果 specNameMatcher
保留为默认值,您会遇到同样的问题,但文件夹中的文件名称中没有 'spec'。
的作用是将文件夹(或 'test set' 或任何您想调用的名称)设置为 []
:
jasmine_node: {
options: {
forceExit: true
},
all: []
}
要注意的是,如果您在项目的其他地方有 any 个名称中包含 'spec' 的其他文件,它们将被 jasmine 误认为是测试。
我认为此行为是一个错误,应该通过项目的 github 问题页面报告。
这个 grunt 插件(https://github.com/jasmine-contrib/grunt-jasmine-node ) seems to be dead ( https://github.com/jasmine-contrib/grunt-jasmine-node/issues/60)。
jasmine-node project is pretty old. The latest commit is from July of 2014. The grunt-jasmine-node 插件似乎处于活动状态,但是 运行 反对即将过时的东西似乎有点毫无意义恕我直言。
要使用 Jasmine 测试 CommonJS 模块,我建议使用 Karma 以及
karma-jasmine and 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(如果您仍想使用 g运行t,则可选)
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 命令行 运行ner,就像您可能对 g运行t 所做的那样。 npm install -g karma-cli
在命令行中,您可以通过键入 karma start
来启动 karma。它将 运行 测试,然后观察您的文件并在每次保存时重新 运行 它们。 (非常好)
或者您可以 运行 karma start --single-run
只 运行 测试一次然后退出。如果您还更新了 G运行t 文件,您也可以只 运行 grunt
到 运行 测试一次。
我在使用 grunt-jasmine-node 时遇到了同样的问题,正如 aeryaguzov 指出的那样,该项目已不再维护。切换到 grunt-jasmine-node-new 为我解决了这个问题。
grunt-jasmine-node-new 是积极维护的 grunt-jasmine-node 的一个分支,可以在这里找到:https://www.npmjs.com/package/grunt-jasmine-node-new
当前投票赞成的答案不是解决方案。您只需修改将与您的测试匹配的表达式。答案如下:
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'。这将搜索所有测试。
其次,仅仅因为一个项目最近没有提交,并不意味着它是 "old"。 jasmine-node 非常稳定。
我将 g运行t 设置为 运行 node.js 茉莉花测试。出于某种原因,使用此配置,结果总是显示双倍的测试。
这是我的配置:
我正在使用插入 g运行t 的 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
我能够重现该行为。这似乎正在发生:
- 该任务在指定文件夹(在您的情况下为
spec
)中查找名称中带有 spec 的文件。 - 然后它再次在整个项目的 每个 文件夹中查找名称中带有 spec 的文件。
它最终得到的是 运行 的 2 组重叠测试文件。
我第一次尝试将其强制为更合乎逻辑的行为是设置 specNameMatcher: null
(默认为 'spec'),并将文件夹设置为 'spec/'。这导致没有测试 运行,因为显然指定文件夹中的文件必须满足两个条件(名称和文件夹)。如果 specNameMatcher
保留为默认值,您会遇到同样的问题,但文件夹中的文件名称中没有 'spec'。
的作用是将文件夹(或 'test set' 或任何您想调用的名称)设置为 []
:
jasmine_node: {
options: {
forceExit: true
},
all: []
}
要注意的是,如果您在项目的其他地方有 any 个名称中包含 'spec' 的其他文件,它们将被 jasmine 误认为是测试。
我认为此行为是一个错误,应该通过项目的 github 问题页面报告。
这个 grunt 插件(https://github.com/jasmine-contrib/grunt-jasmine-node ) seems to be dead ( https://github.com/jasmine-contrib/grunt-jasmine-node/issues/60)。
jasmine-node project is pretty old. The latest commit is from July of 2014. The grunt-jasmine-node 插件似乎处于活动状态,但是 运行 反对即将过时的东西似乎有点毫无意义恕我直言。
要使用 Jasmine 测试 CommonJS 模块,我建议使用 Karma 以及 karma-jasmine and 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(如果您仍想使用 g运行t,则可选)
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 命令行 运行ner,就像您可能对 g运行t 所做的那样。 npm install -g karma-cli
在命令行中,您可以通过键入 karma start
来启动 karma。它将 运行 测试,然后观察您的文件并在每次保存时重新 运行 它们。 (非常好)
或者您可以 运行 karma start --single-run
只 运行 测试一次然后退出。如果您还更新了 G运行t 文件,您也可以只 运行 grunt
到 运行 测试一次。
我在使用 grunt-jasmine-node 时遇到了同样的问题,正如 aeryaguzov 指出的那样,该项目已不再维护。切换到 grunt-jasmine-node-new 为我解决了这个问题。
grunt-jasmine-node-new 是积极维护的 grunt-jasmine-node 的一个分支,可以在这里找到:https://www.npmjs.com/package/grunt-jasmine-node-new
当前投票赞成的答案不是解决方案。您只需修改将与您的测试匹配的表达式。答案如下:
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'。这将搜索所有测试。
其次,仅仅因为一个项目最近没有提交,并不意味着它是 "old"。 jasmine-node 非常稳定。