运行摩卡测试后,如何杀死nodemon进程?
问题描述:
我需要启动服务器的gulp
任务,运行mocha
测试并最终关闭它。我有以下代码:运行摩卡测试后,如何杀死nodemon进程?
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
测试相同的过程中启用和关闭应用程序也不是一种选择。
UPDATE:
除了ThomasBromans答案,我想出了这个解决方案,它似乎在我的情况下工作。每当gulp-mocha
完成测试,它会发出'结束'事件。发生这种情况时,我们只需要发射的子进程“退出”,然后杀死的主要过程,就像这样:
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);
});
});
});
不幸的是我还需要子进程之间被杀害和主要过程杀害超时,如果我删除超时它发生子进程仍然挂起。这个解决方案当然可以改进。
答
您可以使用process.exit()
退出流程。只需添加另一个.pipe。你的任务将是这样的:
gulp.task('my-integration-tests', function() {
return nodemon({ script: './server.js' })
.on('start', function() {
gulp.src(['./mySpecs.spec.js'])
.pipe(mocha())
.pipe(process.exit());
});
});
编辑运行的任务序列中(我不知道这工作没有任何改变):
var gulp = require('gulp'),
mocha = require('gulp-mocha'),
nodemon = require('nodemon'),
runSequence = require('run-sequence');
gulp.task('nodemon', function() {
return nodemon({script: './server.js'});
});
gulp.task('mocha', function() {
return mocha();
});
gulp.task('stop', function() {
process.exit();
});
gulp.task('my-integration-tests', function() {
runSequence('nodemon',
'mocha',
'stop');
});
感谢您的回答。这只是彻底杀死了我的过程。当管道命令到达process.exit()时,似乎摩卡甚至没有时间正确启动。它也杀死了吞噬任务进程,但由nodemon创建的进程仍然活跃,并在任务管理器中看到。 我目前正在看“nodemon.emit('quit');”从他们的官方api中得到的命令类型将会看到我是否能够在摩卡运行结束时发出命令。 – Vee6
@ Vee6嗯。奇怪的。我没有用摩卡尝试过,但它可以与其他一些吞咽任务无缝地结合在一起。你可以尝试运行一个序列。如果你愿意,我可以更新我的答案? –
按顺序你的意思是像async.series或类似的东西?如果你可以更新这个案例,我将不胜感激。 – Vee6