Node.js 在运行mocha测试之后,如何杀死nodemon进程?
我需要一个Node.js 在运行mocha测试之后,如何杀死nodemon进程?,node.js,gulp,mocha.js,nodemon,Node.js,Gulp,Mocha.js,Nodemon,我需要一个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 () { gul
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
测试相同的过程中打开和关闭应用程序
更新: 除了托马斯布罗曼的答案外,我还提出了这个解决方案,在我的案例中似乎是可行的。每当
大口喝摩卡
完成测试时,它都会发出一种“结束”事件。发生这种情况时,我们只需要在子进程上发出“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);
});
});
});
不幸的是,我仍然需要终止子进程和终止主进程之间的超时,如果我删除超时,子进程将保持挂起状态。这个解决方案当然可以改进。您可以使用
process.exit()
退出流程。再加一根管子。您的任务如下所示:
gulp.task('my-integration-tests', function () {
return nodemon({ script: './server.js' })
.on('start', function () {
gulp.src(['./mySpecs.spec.js'])
.pipe(mocha())
.pipe(process.exit());
});
});
编辑按顺序运行任务(我不确定这在没有任何更改的情况下是否有效):
谢谢你的回答。这完全扼杀了我的进程。当管道命令到达process.exit()时,mocha似乎连正确启动的时间都没有。它也会终止“吞咽”任务进程,但是由nodemon创建的进程仍然是活动的,并且可以在任务管理器中看到。我目前正在查看“nodemon.emit('quit');”类型的命令,这些命令取自它们的官方api,我将查看是否可以在mocha运行结束时让它发出。@Vee6-Hmm。奇怪。我没有尝试过摩卡咖啡,但它与其他一些吞咽任务无缝地工作。您可以尝试运行一个序列。如果你想,我可以更新我的答案?你说的序列是指async.series之类的东西吗?如果你能更新这个案例,我将不胜感激。@Vee6我已经更新了我的答案。但对语法不是100%确定。你可能需要更新一些小东西。谢谢。runSequence解决方案看起来相当优雅。同时,我也会发布我自己的。
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');
});