我使用带有socket.io的Node.js构建了一个简单的Web界面,我通过开始使用CapserJS子进程来运行浏览器自动化测试。
除非我附加stdout.on('data')
处理程序,否则CasperJS子进程无法正常退出。如果我的代码中没有这个处理程序,我的exit
处理程序永远不会被调用,CasperJS进程就会被孤立。我究竟做错了什么?我的子进程是否要求我在进程结束之前输出它的输出?
io.on('connection', function (socket) {
socket.on('run tests', function(data) {
if (runningProcess) {
io.emit('alert', 'Please wait for current test run to finish');
return;
}
var command = spawn(
'casperjs',
[
'test',
'yadda.js',
'--user="' + data.user + '"',
'--password="' + data.password + '"',
'--server="' + data.server + '"',
'--port="' + data.port + '"'
]
);
runningProcess = true;
// Only exits when un-commented
// command.stdout.on('data', function(data) {
// io.emit('line out', data.toString());
// });
command.on('exit', function(data) {
runningProcess = false;
io.emit('finished');
});
});
});