Подтвердить что ты не робот

Захват ошибок gulp -mocha

Я могу пропустить что-то очень очевидное, но я не могу получить gulp-mocha, чтобы ловить ошибки, в результате чего моя задача gulp watch заканчивается каждый раз, когда у меня есть тест с ошибкой.

Это очень простая настройка:

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);
});

Я также пробовал использовать plumber, combine и gulp-batch безрезультатно, поэтому я думаю, что я пропускаю что-то тривиальное.

Gist: http://gist.github.com/RoyJacobs/b518ebac117e95ff1457

4b9b3361

Ответ 1

Вам нужно игнорировать "ошибку" и всегда испускать "конец", чтобы сделать "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", что является проблематичным для непрерывной интеграции, но я думаю, что в данный момент у нас нет выбора.

Ответ 2

Расширение на Shuhei Kagawa ответ.

излучающий конец предотвратит выход gulp из-за того, что неперехваченная ошибка преобразуется в исключение.

Установить просмотр var для отслеживания того, выполняете ли вы проверку через часы, затем выходите или нет, в зависимости от того, разрабатываете ли вы или запускаете 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