我需要一个启动服务器、对其运行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完成测试时,它就会发出一个“end”事件。当发生这种情况时,我们只需要在子进程上发出“退出”,然后终止主进程,如下所示:
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);
});
});
});不幸的是,我仍然需要子进程被杀死和主进程被杀死之间的超时,如果我删除超时,那么子进程就会被挂起。当然,这个解决方案是可以改进的。
发布于 2015-09-28 12:54:10
您可以使用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');
});https://stackoverflow.com/questions/32823324
复制相似问题