执行"节点应用程序"挂在 GULP 任务中



此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插件

相关内容

  • 没有找到相关文章

最新更新