2

この gulp タスクはオンラインでハングしexec('node config/app')ます。最初execは正常に動作しますが、2番目はハングします。

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が、2 番目の出力は表示されませんconsole.log

testem でテストを実行する前に、サーバーを実行しようとしています。

私はこの同様の解決策を試しましたが、うまくいきません: nodejs で git shortlog を実行しようとすると Exec が何も返さない

また、私は最近、ぶら下がっている testem gulp タスクの質問をしました: 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 に答える