2

这个 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

我正在尝试在使用 testem 运行测试之前运行我的服务器。

我已经尝试过这个类似的解决方案,但它不起作用:Exec not return any when trying to run git shortlog with nodejs

另外我最近问了一个挂起的 testem gulp task 问题:Testem gulp task hangs after finished

编辑

我目前的解决方案是:

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();
            });
        }

    });

});
4

2 回答 2

3

如果要使用 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

于 2014-08-24T09:06:53.890 回答
0

There is ŧestem plugin on github.

于 2014-09-14T13:41:10.710 回答