Мне нужна задача gulp
, которая запускает сервер, запускает mocha
тесты для него и, наконец, закрывает его. У меня есть следующий код:
var mocha = require('gulp-mocha');
var nodemon = require('nodemon');
gulp.task('my-integration-tests', function () {
return nodemon({ script: './server.js' })
.on('start', function () {
gulp.src(['./mySpecs.spec.js'])
.pipe(mocha());
});
});
Сервер успешно запущен и тесты запущены. Однако после этого процесс, созданный nodemon
, все еще жив. Есть ли способ закрыть nodemon
после завершения? Кроме того, открытие и закрытие приложения в том же процессе, что и тесты mocha
, не является вариантом с текущей конфигурацией.
ОБНОВИТЬ:
Помимо ответа ThomasBromans, я придумал это решение, которое, похоже, работает в моем случае. Всякий раз, когда gulp-mocha
завершает тесты, он как бы выдает событие «конец». Когда это происходит, нам нужно только запустить 'quit' для дочернего процесса, а затем убить основной процесс, например:
gulp.task('my-integration-tests', function () {
var childProc = nodemon({ script: './server.js' });
childProc.on('quit', function () {
console.log('event emitted, child process is being killed');
})
childProc.on('start', function () {
gulp.src(['./mySpecs.spec.js'])
.pipe(mocha())
.once('end', function () {
console.log('mocha stuff ended. time to kill processes');
childProc.emit('quit');
setTimeout(function () {
console.log('kill main process');
process.exit();
}, 1500);
});
});
});
К сожалению, мне все еще нужен тайм-аут между уничтожением дочернего процесса и убийством основного процесса, если я убираю тайм-аут, случается, что дочерний процесс остается зависшим. Это решение, конечно, открыто для улучшений.