Javascript 抓住一口摩卡咖啡的错误
我可能错过了一些非常明显的东西,但我无法让Javascript 抓住一口摩卡咖啡的错误,javascript,mocha.js,gulp,Javascript,Mocha.js,Gulp,我可能错过了一些非常明显的东西,但我无法让大口喝摩卡捕捉错误,导致每次测试失败时我的大口喝手表任务都会结束 这是一个非常简单的设置: gulp.task("watch", ["build"], function () { gulp.watch([paths.scripts, paths.tests], ["test"]); }); gulp.task("test", function() { return gulp.src(paths.tests) .pipe(mocha({
大口喝摩卡
捕捉错误,导致每次测试失败时我的大口喝手表
任务都会结束
这是一个非常简单的设置:
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));
});
或者,将处理程序放在整个流上也会产生相同的问题:
gulp.task("test", function() {
return gulp.src(paths.tests)
.pipe(mocha({ reporter: "spec" }))
.on("error", gutil.log);
});
我也尝试过使用管道工
,组合
和大口大口
,但都没有用,所以我想我忽略了一些琐碎的事情
要点:您需要忽略“error”并始终发出“end”以使“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));
});
这使得“gulp test”总是返回“0”,这对于持续集成来说是个问题,但我认为我们现在别无选择。扩展了Shuhei Kagawa的答案 由于未捕获错误被转换为异常,发射端将阻止吞咽退出 设置监视变量以跟踪您是否正在通过监视运行测试,然后根据您是在开发还是在运行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代码中的
mocha
符号来自何处?(什么定义?)它是mocha=require(“gulp mocha”)
如果失败的测试是一个异步测试,那么请禁用所有失败的异步测试(您可以注释掉它们),并添加一个失败的同步测试(例如断言true==false
)。修改后问题仍然存在吗?是的,整个测试套件由一个只包含一个简单断言的测试组成。我在这里提供了一个复制要点:我想摩卡的错误处理和gulp之间可能有问题(因为我在摩卡和其他工具之间遇到过),但这里似乎不是这样。这太棒了。我讨厌每次我在SCSSAny解决方案中写错字时我的吞咽流都会结束,因为吞咽测试返回0部分?尽管有这个小缺点,但仍然是最好的解决方案……:)非常感谢。