从吞噬问题运行业力任务
我正试图从gulp任务运行业力testing,我得到这个错误:
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)
我的系统是Windows 7
,nodejs版本是v0.10.32
, v0.10.32
版本:
[10:26:52] CLI version 3.8.8 [10:26:52] Local version 3.8.9
此外,同样的错误我得到的Ubuntu 12.04 LTS
而在较新的Ubuntu(不知道什么版本)和Mac OS似乎是工作正常。 什么会导致这个错误?
更新5/11/2016 :在写关于接受的答案隐藏错误的事实的评论之前,请先看两个评论,以接受答案。 只有在知道自己在做什么的情况下才使用它。 相关信息: https : //github.com/karma-runner/gulp-karma/pull/15
你如何用Gulp进行testing? 我最近在OSX上v0.11.14
这个问题,运行节点v0.11.14
和v0.11.14
3.8.10
,每当testing失败的时候。
改变build议:
gulp.task('test', function(done) { karma.start({ configFile: __dirname + '/karma.conf.js', singleRun: true }, done); });
至:
gulp.task('test', function(done) { karma.start({ configFile: __dirname + '/karma.conf.js', singleRun: true }, function() { done(); }); });
摆脱了这个错误
似乎是在callback中发生错误时,吞噬如何处理错误消息。 有关更多信息,请参阅退出时改进错误消息 。
这些解决scheme都没有正确使用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(); });
下面是使用Karma的一些吞噬模式的代码片段。 这有点类似,但也使用新的方法如何启动业力。
/** * 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(); } } }
什么为我工作,并提供了一个不错的格式化错误信息是提供一个错误实例done
callback。
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(); }); });
如果你想返回一个错误代码,并希望看到Karma的错误输出,但不是Gulp的(可能不相关的)堆栈跟踪:
gulp.task('test', function() { karma.start({ configFile: __dirname + '/karma.conf.js', singleRun: true }, function(karmaExitStatus) { if (karmaExitStatus) { process.exit(1); } }); });
不知道Ubuntu的,但我得到了类似的错误在Windows上,安装一个版本回来修复它马上就像这样:
npm install -g gulp@3.8.8 npm install gulp@3.8.8
这是咕嘟咕嘟的告诉你的testing失败了,业力退出,返回代码1.你为什么要自己打电话做,而不是通过错误作为消息困扰我。
根据Karma的文档和https://github.com/pkozlowski-opensource解决这个问题的正确方法是依靠Karma的手表机制而不是Gulp的:;
gulp.task('tdd', function (done) { karma.start({ configFile: __dirname + '/karma.conf.js' }, done); });
注意singleRun: true
的省略singleRun: true
。
@ McDamon的解决方法将适用于gulp.watch
,但是您不希望在CI服务器上运行时吞下那样的退出代码。
Gulp也在重新devise他们如何处理像这样的场景中的退出代码。 见https://github.com/gulpjs/gulp/issues/71和其他十几个相关的问题。;
gulp.task('test', function(done) { karma.start({ configFile: __dirname + '/karma.conf.js', singleRun: false }, done); });
传递singleRun: false
参数会阻止进程返回一个不同于0的值(这意味着错误并退出)。
使用singleRun: true
运行singleRun: true
如果仅从命令行启动testing,则不是运行连续集成套件的一部分。
如果有其他人来到这里,不要使用公认的解决scheme。 它会隐藏失败的testing。 如果你需要一个快速的解决scheme来修改你的gulptesting任务,你可以在这个 github线程中使用这个注释中的解决scheme。
gulp.src(src) // pipeline... .on('error', function (error) { console.error('' + error); });