我有一個node.js服務器,它將打印出一些消息在控制檯,然後啓動服務器。有沒有更好的方法來終止childProcess然後只是做一個childProcess.kill()
我正在使用tap來檢查console.log中的消息並檢查服務器是否已啓動,即生成了PID,從而創建自動化測試。
我嘗試了2種不同的方法-child_process.exec和child_process.spawn 1.使用帶回調函數的child_process.exec。 這不起作用,因爲服務器長時間運行,甚至不會 去回調,所以我甚至無法檢查任何標準輸出。
然後,我使用child_process.exec而不回叫,這解決了 第一個問題,我現在可以從stdout中獲取消息。
第二個問題是測試將掛起,因爲服務器長時間運行並且不會自行終止。
code snippet:
var exec = require('child_process').exec;
tap.test('test server start', function(t) {
childProcess= exec('node',['server']);
console.log('[exec] childProcess.pid: ', childProcess.pid);
t.notEqual(childProcess.pid, undefined);
childProcess.stdout.on('data', function (data) {
console.log('[exec] stdout: ', data.toString());
t.match(data.toString(), "Example app listening at http://:::3000");
t.end();
childProcess.kill('SIGTERM');
});
childProcess.stderr.on('data', function (data) {
console.log('[exec] stderr: ', data.toString());
});
childProcess.on('close', function (code) {
if (code!=null)
console.log('child process exited with code '+ code);
});
});
使用child_process.spawn -code片斷
var spawn = require('child_process').spawn; tap.test('test server start', function(t) { childProcess= spawn('node',['server']); console.log('[spawn] childProcess.pid: ', childProcess.pid); t.notEqual(childProcess.pid, undefined); childProcess.stdout.on('data', function (data) { console.log('[spawn] stdout: ', data.toString()); t.match(data.toString(), "Example app listening at http://:::3000"); t.end(); childProcess.kill('SIGTERM'); }); childProcess.stderr.on('data', function (data) { console.log('[spawn] stderr: ', data.toString()); }); childProcess.on('close', function (code) { if (code!=null) console.log('child process exited with code '+ code); }); });
在兩種1 & 2,測試由於服務器將掛起是長期運行的, 我需要使用child_process.kill()來終止測試
有沒有更好的方法來實現這個?
在此先感謝您的任何改進。