当我更改文件(如HelloWorld.js
)时,我想使用Karma运行特定的测试套件(称为HelloWorldSpec.js
)。
因此我创建了这个Gulp任务:
gulp.task('dev', function(done) {
// Watch source code changes
gulp.watch('src/**/*.js').on('change', function(file) {
// Assemble path to test file
var pathObject = path.parse(file.path);
var specificationPath = 'test/' + pathObject.name + 'Spec.js';
// Run test file
new Server({
configFile: __dirname + '/karma.conf.js',
files: [
'dist/**/*.js',
specificationPath
],
singleRun: true
}, done).start();
});
});
我现在遇到的问题是我将done
回调传递给Karma服务器,该服务器在每次测试运行后执行它。因此,我在第二个源代码修改(以及每个后续代码)上收到以下错误:
错误:任务完成回调调用次数
如果我没有将done
回调传递给Server
,那么我的Gulp任务会在第一次测试运行后结束。但我想继续关注源代码修改。我怎么能这样做?
答案 0 :(得分:0)
我也面临同样的问题。我偶然发现了实际有效的link和this。
gulp.task('test', function (done) {
var server = new Server({
configFile: __dirname + '/karma.conf.js',
singleRun: true
});
server.on('browser_error', function (browser, err){
gutil.log('Karma Run Failed: ' + err.message);
throw err;
});
server.on('run_complete', function (browsers, results){
if (results.failed) {
throw new Error('Karma: Tests Failed');
}
gutil.log('Karma Run Complete: No Failures');
done();
});
server.start();
});
希望这对你有所帮助!
答案 1 :(得分:0)
我在与gulp-watch同时使用webpack手表时遇到了类似的问题。
这是我的饮酒设置:
gulp.task("javascript", function (done) {
webpack(webpackConfig, function (err, stats) {
// logs errors and stats here
done();
browserSync.reload();
});
});
gulp.watch([JS_SOURCE, HTML_VIEWS], ["javascript"]);
我的webpack配置:
module.exports = {
module: {
loaders: [
{
test: /\.(js|jsx)$/,
loaders: "babel-loader",
exclude: /node_modules/,
options: {
presets: ["es2015"]
}
}
]
},
watch: true
};
在webpack配置中删除 watch:true 修复了此问题。