2015-10-17 3 views
10

Jestem nowy w węźle i rozwijam się w każdym "właściwym" środowisku. Zainstalowałem łyk na mój obecny projekt, razem z mocha i kilkoma innymi modułami. Oto moje gulpfile.js:Gulp wisi po "Wykończeniu"

var gulp = require('gulp'); 
var mocha = require('gulp-mocha'); 
var eslint = require('gulp-eslint'); 

gulp.task('lint', function() { 
    return gulp.src(['js/**/*.js']) 
     // eslint() attaches the lint output to the eslint property 
     // of the file object so it can be used by other modules. 
     .pipe(eslint()) 
     // eslint.format() outputs the lint results to the console. 
     // Alternatively use eslint.formatEach() (see Docs). 
     .pipe(eslint.format()) 
     // To have the process exit with an error code (1) on 
     // lint error, return the stream and pipe to failOnError last. 
     .pipe(eslint.failOnError()); 
}); 

gulp.task('test', function() { 
    return gulp.src('tests/test.js', {read: false}) 
     // gulp-mocha needs filepaths so you can't have any plugins before it 
     .pipe(mocha({reporter: 'list'})); 
}); 

gulp.task('default', ['lint','test'], function() { 
    // This will only run if the lint task is successful... 
}); 

Kiedy uruchamiam „łyk”, wydaje się, aby wypełnić wszystkie swoje zadania, ale zawiesza się. Muszę ctrl + c, aby wrócić do wiersza polecenia. Jak mogę go poprawnie zakończyć?

+0

uruchomić dowolny zadań przez siebie ('' test' haustem haustem lint'), oni zawiesić? W tym miejscu wyciąłem i wkleiłem twój kod i nie mam problemu z jego uruchomieniem. Nic się nie wisi. – Louis

+0

Spróbuję tego później, dzięki. – Ooberdan

Odpowiedz

15

Przepraszam, ludzie! Okazuje się, że jest to adresowane w gulp-mocha FAQ. Zacytować:

testowych nie wychodząc

Jeśli zestaw testowy nie jest wyjściem może być, bo trzeba jeszcze utrzymujące zwrotnego, najczęściej spowodowane przez otwartej bazie połączenia. Należy zamknąć połączenie lub wykonać następujące czynności:

gulp.task('default', function() { 
    return gulp.src('test.js') 
     .pipe(mocha()) 
     .once('error', function() { 
      process.exit(1); 
     }) 
     .once('end', function() { 
      process.exit(); 
     }); 
}); 
2

Dodaj zwrotną deklarację wewnątrz zadania. Lub uruchom wywołanie zwrotne.

gulp.task('default', ['lint','test'], function (next) { 
    // This will only run if the lint task is successful... 
    next(); 
}); 
+0

Próbowałem zarówno wywołania zwrotnego, i dodawanie zwrotu na próżno. – Ooberdan

3

Jeśli nie działa nic po gulp-mocha, przyjętego rozwiązania będzie pracować dla Ciebie. Jednakże, jeśli trzeba uruchomić zadania po gulp-mocha (na przykład z systemem testów mokka przed wdrożeniem kompilacji) Oto rozwiązanie, które będzie zapobiegać gulp od wisi w nieskończoność, a jednocześnie pozwalając zadania do uruchomienia po gulp-mocha:

gulp.on('stop',() => { process.exit(0); }); 
gulp.on('err',() => { process.exit(1); }); 

To działa, ponieważ gulpinherits od orchestrator który emits the events po wykonaniu wszystkich zadań do zakończenia lub błędu, odpowiednio.

2

Po aktualizacji do mokki 4, udało mi się rozwiązać ten problem, przekazując --exit do mokki.

Aby uzyskać więcej informacji, patrz https://boneskull.com/mocha-v4-nears-release/#mochawontforceexit.

Podczas korzystania haustem-mocha, dodaj opcję jako exit: true jak w:

gulp.task('test', function() { 
    return gulp.src(['tests/**/*.spec.js'], {read: false}) 
    .pipe(mocha({ exit: true })); 
});