web-dev-qa-db-fra.com

Détecter les erreurs Gulp-Mocha

Je manque peut-être quelque chose d'extrêmement évident, mais je ne peux pas obtenir gulp-mocha pour détecter les erreurs, provoquant mon gulp watch tâche pour terminer chaque fois que j'ai un test qui échoue.

C'est une configuration très simple:

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

Alternativement, mettre le gestionnaire sur le flux entier pose également le même problème:

gulp.task("test", function() {
  return gulp.src(paths.tests)
    .pipe(mocha({ reporter: "spec" }))
    .on("error", gutil.log);
});

J'ai également essayé d'utiliser plumber, combine et gulp-batch en vain, donc je suppose que je néglige quelque chose de trivial.

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

39
Roy Jacobs

Vous devez ignorer "error" et toujours émettre "end" pour que "gulp.watch" fonctionne.

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

Cela fait que "test gulp" renvoie toujours "0", ce qui est problématique pour l'intégration continue, mais je pense que nous n'avons pas le choix pour le moment.

66
Shuhei Kagawa

Élargir la réponse de Shuhei Kagawa ..

l'émission de fin empêchera la sortie de gulp en raison de la conversion de l'erreur non capturée en exception.

Définissez une variable de surveillance pour suivre si vous exécutez le test via la montre, puis quittez ou non selon que vous développez ou exécutez 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"]);
});

Cela peut ensuite être utilisé pour le développement et CI

41
abovethewater