此gulp任务挂起在exec('node config/app')
行。第一个exec
工作正常,但第二个只是挂起。
gulp.task('test', function(cb) {
var exec = require('child_process').exec;
exec('echo 3', function(err, stdout) {
console.log(stdout);
});
exec('node config/app', function(err, stdout, stderr) {
console.log(stdout);
var testemOptions = {
file: 'testem.json'
};
var t = new testem();
return t.startCI(testemOptions, function() {
cb();
});
});
});
我可以看到输出3
,但没有显示第二个console.log
的输出。
我正在尝试在使用系统运行测试之前运行我的服务器。
我尝试过这个类似的解决方案,但它不工作:Exec不返回任何东西时,试图运行git短日志与nodejs。
我最近也问了一个挂起的testem gulp任务问题:testem gulp任务完成后挂起。
编辑:
我当前的解决方案是:
gulp.task('test', /*['build'],*/ function(cb) {
var spawn = require('child_process').spawn;
var proc = spawn('node', ['config/app']);
proc.stdout.on('readable', function() {
var output = proc.stdout.read();
if (output && output.toString().match('express listening')) {
var testemOptions = {
file: 'testem.json'
};
var t = new testem();
t.startCI(testemOptions, function() {
proc.kill();
cb();
});
}
});
});
如果你想使用testem来测试"node config/app"服务器,你不能使用exec。
Exec应该在命令完成时回调,所以在您的情况下,它永远不会回调。
与试
gulp.task('test', function(cb) {
var spawn = require('child_process').spawn;
var proc = spawn('node', ['config/app']);
var testStarted = false;
proc.stdout.on('readable', function() {
if (testStarted) return;
testStarted = true;
var testemOptions = {
file: 'testem.json'
};
var t = new testem();
t.startCI(testemOptions, function() {
proc.kill()
cb();
});
}
});
请注意,我没有测试这段代码,并且它可能无法处理您可能遇到的所有极端情况(例如,如果服务器意外停止)
你可能还想检查插件https://github.com/sargentsurg/gulp-testem
github上有ŧestem插件