Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 抓住一口摩卡咖啡的错误_Javascript_Mocha.js_Gulp - Fatal编程技术网

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部分?尽管有这个小缺点,但仍然是最好的解决方案……:)非常感谢。