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