3
我需要啓動服務器的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()時,似乎摩卡甚至沒有時間正確啓動。它也殺死了吞噬任務進程,但由nodemon創建的進程仍然活躍,並在任務管理器中看到。 我目前正在看「nodemon.emit('quit');」從他們的官方api中得到的命令類型將會看到我是否能夠在摩卡運行結束時發出命令。 – Vee6
@ Vee6嗯。奇怪的。我沒有用摩卡嘗試過,但它可以與其他一些吞嚥任務無縫地結合在一起。你可以嘗試運行一個序列。如果你願意,我可以更新我的答案? –
按順序你的意思是像async.series或類似的東西?如果你可以更新這個案例,我將不勝感激。 – Vee6