web-dev-qa-db-ja.com

カルプからカルマタスクを実行する際の問題

私はgulpタスクからカルマテストを実行しようとしていますが、このエラーが発生しています:

Error: 1
   at formatError (C:\Users\Tim\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:161:10)
   at Gulp.<anonymous> (C:\Users\Tim\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:187:15)
   at Gulp.emit (events.js:95:17)
   at Gulp.Orchestrator._emitTaskDone (C:\path\to\project\node_modules\gulp\node_modules\orchestrator\index.js:264:8)
   at C:\path\to\project\node_modules\gulp\node_modules\orchestrator\index.js:275:23
   at finish (C:\path\to\project\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:21:8)
   at cb (C:\path\to\project\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:29:3)
   at removeAllListeners (C:\path\to\project\node_modules\karma\lib\server.js:216:7)
   at Server.<anonymous> (C:\path\to\project\node_modules\karma\lib\server.js:227:9)
   at Server.g (events.js:180:16)

私のシステムはWindows 7、nodejsバージョンはv0.10.32、gulpバージョン:

[10:26:52] CLI version 3.8.8
[10:26:52] Local version 3.8.9

また、Ubuntu 12.04 LTS新しいUbuntu(どのバージョンかわからない)およびMac OSでは正常に動作しているようです。このエラーの原因は何ですか?

2016年5月11日更新:回答の非表示エラーを受け入れたという事実についてコメントを書く前に、その受け入れられた特定の回答に対する最初の2つのコメントを参照してください。何をしているのかを知っている場合にのみ使用してください。関連情報: https://github.com/karma-runner/gulp-karma/pull/15

64
Timur

Gulpでどのようにテストを実行していますか?最近、OSXでノードv0.11.14およびgulp 3.8.10、失敗したテストがあったときはいつでも。

推奨からの変更:

gulp.task('test', function(done) {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: true
    }, done);
});

に:

gulp.task('test', function(done) {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: true
    }, function() {
        done();
    });
});

...このエラーを取り除きました。

コールバックでエラーが通知されたときにgulpがエラーメッセージを処理する方法に依存しているようです。詳細については、 終了時のエラーメッセージの改善 を参照してください。

131
McDamon

Gulp 3.9.1とkarma 1.1.1を使用した場合、これらのソリューションはどれも正しく機能しませんでした。 gulp-utilへの参照の追加npm install --save-dev gulp-utilおよびタスクを以下に更新すると、終了ステータスを正しく維持しながら、エラー出力が非常にうまく修正されます。

var gutil = require('gulp-util');

gulp.task('test', function (done) {
  new Server({
    configFile: __dirname + '/karma.conf.js',
    singleRun: true
  }, function(err){
        if(err === 0){
            done();
        } else {
            done(new gutil.PluginError('karma', {
                message: 'Karma Tests failed'
            }));
        }
    }).start();
});
9
brocksamson

以下は、Karmaの使用に関するgulpパターンのコードスニペットです。少し似ていますが、新しい方法を使用してカルマを開始します。

/**
 * Start the tests using karma.
 * @param  {boolean} singleRun - True means run once and end (CI), or keep running (dev)
 * @param  {Function} done - Callback to fire when karma is done
 * @return {undefined}
 */
function startTests(singleRun, done) {
    var child;
    var excludeFiles = [];
    var fork = require('child_process').fork;
    var KarmaServer = require('karma').Server;
    var serverSpecs = config.serverIntegrationSpecs;

    if (args.startServers) {
        log('Starting servers');
        var savedEnv = process.env;
        savedEnv.NODE_ENV = 'dev';
        savedEnv.PORT = 8888;
        child = fork(config.nodeServer);
    } else {
        if (serverSpecs && serverSpecs.length) {
            excludeFiles = serverSpecs;
        }
    }

    var server = new KarmaServer({
        configFile: __dirname + '/karma.conf.js',
        exclude: excludeFiles,
        singleRun: singleRun
    }, karmaCompleted);
    server.start();

    ////////////////

    function karmaCompleted(karmaResult) {
        log('Karma completed');
        if (child) {
            log('shutting down the child process');
            child.kill();
        }
        if (karmaResult === 1) {
            done('karma: tests failed with code ' + karmaResult);
        } else {
            done();
        }
    }
}
5
Igor Lino

私のために働いて、ナイス形式のエラーメッセージを出したのは、doneコールバックにErrorインスタンスを提供することです。

gulp.task('test', function(done) {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: true
    }, function(result) {
        if (result > 0) {
            return done(new Error(`Karma exited with status code ${result}`));
        }

        done();
    });
});
5
Blacksonic

エラーコードを返したい場合、Kalpの(おそらく無関係の)スタックトレースではなくKarmaのエラー出力を表示する場合:

gulp.task('test', function() {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: true
    }, function(karmaExitStatus) {
           if (karmaExitStatus) {
               process.exit(1);
           }
    });
});
2
user3479425

これは、テストが失敗し、カルマが1の戻りコードで終了したことを通知するgulpの方法です。

1
Laurent Picquet

Ubuntuについてはわかりませんが、Windowsでも同様のエラーが発生していました。1つのバージョンをインストールするとすぐに修正されました:

npm install -g [email protected]
npm install [email protected]
1
onfilm
gulp.task('test', function(done) {
    karma.start({
        configFile: __dirname + '/karma.conf.js',
        singleRun: false 
    }, done);
});

singleRun: false引数を渡すと、プロセスが0以外の値を返すことを防ぎます(エラーを意味し、gulpを終了します)。

連続統合スイートの一部ではなく、コマンドラインからのみテストを起動する場合は、singleRun: trueで実行します。

0
deBrice

Karmaのドキュメントと https://github.com/pkozlowski-opensource に従ってこれを解決する正しい方法は、GulpではなくKarmaの監視メカニズムに依存することです。

gulp.task('tdd', function (done) {
  karma.start({
    configFile: __dirname + '/karma.conf.js'
  }, done);
});

singleRun: trueの省略に注意してください。

@McDamonの回避策はgulp.watchで機能しますが、CIサーバーで実行する場合は、そのような終了コードを飲み込みたくないでしょう。

Gulpはまた、このようなシナリオで終了コードを処理する方法を修正しています。 https://github.com/gulpjs/gulp/issues/71 およびその他の関連する問題を参照してください。

0
Seth

他の人がここに来た場合は、受け入れられているソリューションを使用しないでください。失敗したテストは非表示になります。 gulpテストタスクを変更するための迅速なソリューションが必要な場合は、この comment in this github threadにあるソリューションを使用できます。

gulp.src(src)
    // pipeline...
    .on('error', function (error) {
        console.error('' + error);
    });
0
mordant23