Tim*_*mur 64 node.js karma-runner gulp
我正在尝试从gulp任务运行业力测试,我收到此错误:
Error: 1
at formatError (C:\Users\Tim\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:161:10)
at Gulp.<anonymous> (C:\Users\Tim\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:187:15)
at Gulp.emit (events.js:95:17)
at Gulp.Orchestrator._emitTaskDone (C:\path\to\project\node_modules\gulp\node_modules\orchestrator\index.js:264:8)
at C:\path\to\project\node_modules\gulp\node_modules\orchestrator\index.js:275:23
at finish (C:\path\to\project\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:21:8)
at cb (C:\path\to\project\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:29:3)
at removeAllListeners (C:\path\to\project\node_modules\karma\lib\server.js:216:7)
at Server.<anonymous> (C:\path\to\project\node_modules\karma\lib\server.js:227:9)
at Server.g (events.js:180:16)
Run Code Online (Sandbox Code Playgroud)
我的系统是Windows 7
,nodejs版本是,gulp v0.10.32
版本:
[10:26:52] CLI version 3.8.8
[10:26:52] Local version 3.8.9
Run Code Online (Sandbox Code Playgroud)
另外,我Ubuntu 12.04 LTS
在更新的Ubuntu(不确定是什么版本)和mac os上遇到的同样的错误似乎工作正常.什么可能导致此错误?
2016年5月11日更新:在写关于接受的答案隐藏错误这一事实的评论之前,请参阅该特定接受答案的前两条评论.只有知道自己在做什么才能使用它.相关信息:https://github.com/karma-runner/gulp-karma/pull/15
McD*_*mon 131
你是如何用Gulp运行测试的?我最近在OSX上遇到了这个问题,运行node v0.11.14
和gulp 3.8.10
,每当测试失败时.
改变建议:
gulp.task('test', function(done) {
karma.start({
configFile: __dirname + '/karma.conf.js',
singleRun: true
}, done);
});
Run Code Online (Sandbox Code Playgroud)
至:
gulp.task('test', function(done) {
karma.start({
configFile: __dirname + '/karma.conf.js',
singleRun: true
}, function() {
done();
});
});
Run Code Online (Sandbox Code Playgroud)
......摆脱了这个错误.
似乎是当gulp在回调中发出错误信号时如何处理错误消息.有关详细信息,请参阅退出时改进错误消息.
使用gulp 3.9.1和karma 1.1.1,这些解决方案都不能正常使用.添加对gulp-util的引用并将npm install --save-dev gulp-util
任务更新到下面可以非常好地修复错误输出,同时正确地保持退出状态.
var gutil = require('gulp-util');
gulp.task('test', function (done) {
new Server({
configFile: __dirname + '/karma.conf.js',
singleRun: true
}, function(err){
if(err === 0){
done();
} else {
done(new gutil.PluginError('karma', {
message: 'Karma Tests failed'
}));
}
}).start();
});
Run Code Online (Sandbox Code Playgroud)
下面是使用Karma的gulp模式的代码片段.它有点类似,但也使用更新的方法如何开始业力.
/**
* Start the tests using karma.
* @param {boolean} singleRun - True means run once and end (CI), or keep running (dev)
* @param {Function} done - Callback to fire when karma is done
* @return {undefined}
*/
function startTests(singleRun, done) {
var child;
var excludeFiles = [];
var fork = require('child_process').fork;
var KarmaServer = require('karma').Server;
var serverSpecs = config.serverIntegrationSpecs;
if (args.startServers) {
log('Starting servers');
var savedEnv = process.env;
savedEnv.NODE_ENV = 'dev';
savedEnv.PORT = 8888;
child = fork(config.nodeServer);
} else {
if (serverSpecs && serverSpecs.length) {
excludeFiles = serverSpecs;
}
}
var server = new KarmaServer({
configFile: __dirname + '/karma.conf.js',
exclude: excludeFiles,
singleRun: singleRun
}, karmaCompleted);
server.start();
////////////////
function karmaCompleted(karmaResult) {
log('Karma completed');
if (child) {
log('shutting down the child process');
child.kill();
}
if (karmaResult === 1) {
done('karma: tests failed with code ' + karmaResult);
} else {
done();
}
}
}
Run Code Online (Sandbox Code Playgroud)
对我有用,并给出了很好的格式化错误消息的是,为done
回调提供了Error实例。
gulp.task('test', function(done) {
karma.start({
configFile: __dirname + '/karma.conf.js',
singleRun: true
}, function(result) {
if (result > 0) {
return done(new Error(`Karma exited with status code ${result}`));
}
done();
});
});
Run Code Online (Sandbox Code Playgroud)