首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行摩卡测试之后,我怎样才能杀死无恶魔进程?

在运行摩卡测试之后,我怎样才能杀死无恶魔进程?
EN

Stack Overflow用户
提问于 2015-09-28 12:43:49
回答 1查看 3.3K关注 0票数 3

我需要一个启动服务器、对其运行gulp测试并最终关闭它的mocha任务。我有以下代码:

代码语言:javascript
复制
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完成测试时,它就会发出一个“end”事件。当发生这种情况时,我们只需要在子进程上发出“退出”,然后终止主进程,如下所示:

代码语言:javascript
复制
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);
        });            
  });    
});

不幸的是,我仍然需要子进程被杀死和主进程被杀死之间的超时,如果我删除超时,那么子进程就会被挂起。当然,这个解决方案是可以改进的。

EN

回答 1

Stack Overflow用户

发布于 2015-09-28 12:54:10

您可以使用process.exit()退出进程。只需添加另一个.pipe即可。您的任务如下所示:

代码语言:javascript
复制
gulp.task('my-integration-tests', function () {    
  return nodemon({ script: './server.js' })
    .on('start', function () {
      gulp.src(['./mySpecs.spec.js'])
        .pipe(mocha())
        .pipe(process.exit());
  });
});

编辑按顺序运行任务的(我不确定这不需要任何更改):

代码语言:javascript
复制
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');
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32823324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档