抓住一口气 – 摩卡的错误
我可能会错过一些非常明显的东西,但我不能得到gulp-mocha
来捕捉错误,导致我的gulp watch
任务结束每次我有一个失败的testing。
这是一个非常简单的设置:
gulp.task("watch", ["build"], function () { gulp.watch([paths.scripts, paths.tests], ["test"]); }); gulp.task("test", function() { return gulp.src(paths.tests) .pipe(mocha({ reporter: "spec" }).on("error", gutil.log)); });
或者,将处理程序放在整个stream上也会产生同样的问题:
gulp.task("test", function() { return gulp.src(paths.tests) .pipe(mocha({ reporter: "spec" })) .on("error", gutil.log); });
我也尝试过使用plumber
, combine
和gulp-batch
无济于事,所以我想我忽略了一些微不足道的东西。
要点: http : //gist.github.com/RoyJacobs/b518ebac117e95ff1457
您需要忽略“错误”,并始终发出“结束”,使“gulp.watch”工作。
function handleError(err) { console.log(err.toString()); this.emit('end'); } gulp.task("test", function() { return gulp.src(paths.tests) .pipe(mocha({ reporter: "spec" }) .on("error", handleError)); });
这使得“吞噬testing”始终返回“0”,这对持续集成是有问题的,但是我认为我们目前没有select。
扩展香川Shuhei的答案..
发射端将防止由于未捕获的错误转化为exception而导致吞咽。
设置一个监视variables来跟踪您是否正在运行testing,然后退出或不运行,具体取决于您是在开发还是在运行CI。
var watching = false; function onError(err) { console.log(err.toString()); if (watching) { this.emit('end'); } else { // if you want to be really specific process.exit(1); } } gulp.task("test", function() { return gulp.src(paths.tests) .pipe(mocha({ reporter: "spec" }).on("error", onError)); }); gulp.task("watch", ["build"], function () { watching = true; gulp.watch([paths.tests], ["test"]); });
这可以用于开发和CI