2016-02-04 11 views
12

--grep=PATTERNフラグをkarma runに渡したいので、特定のテストのみが実行されます。しかし、私がkarma start karma.conf.jsでカルマサーバーを起動すると、すべてのジャスミンユニットテストがすぐに実行されます。数百のテストがあるので、これには時間がかかります。ジャスミンテストを開始せずにKarmaサーバーを実行する方法

質問:カルマサーバーを起動してテストを実行するにはどうすればいいですか?karma runを呼び出すとテストのみ実行されますか?

+0

これもほとんどの答えではありませんが、私は」私はちょうど興味があります。私は非常に遅いバーチャルマシン(1コア、6GBのRAM、Win7)で2秒未満でランダムにいくつかの角度、DOM操作と非同期待機を含む600以上のかなり重いテストを実行します。あなたのテストのパフォーマンスをチェックすることを考えなかったのですか?テストを実行するのにかかる時間を定義してください。 –

+1

テストコードにはwebsocket操作が含まれています。私はカスタムメッセージングスキームを持っていますが、これはテスト対象のユニットであり、それらを嘲笑する方法はありません。クライアントは、遅延を構築したクライアントと、特定のネットワーキング動作をシミュレートするために遅延を組み込んだサーバと通信します。つまり、2つのクライアントから同時に操作を実行しようとすると競合状態になります。残念ながら、それらのテストは、テストバックエンドサーバーでレースを避けるために、連続して実行する必要もあります。とにかく、これは質問に関連していません。私はカルマ+ジャスミンがTDDワークフローを提供していないと信じるのは難しいと思う。 – Dyna

+1

FYI;私はmochaに切り替え、nodeJSベースのmochaランナーを使用しています。これにより、cmdlineレベルで '--grep'フラグを渡すことで単一のテストを実行できます。カルマ+ジャスミンの物語は残念です。( – Dyna

答えて

2

端末を使ってkarma/jasmine経由で一度に1つのテストを実行するのが好きなようです。これが正しければ、これは私が1つのファイルテストを実行するために行うことです。

注:私はカルパをスプールアップするためにgulpを使用しますが、これはまだグローバルカルマを使用するためには有効です。

ここに私のgulpの方法もあります。私karma.config.jsで

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

module.exports = function(config) { 

    config.set({ 

    basePath: '', 

    frameworks: ['jasmine'], 

    // Note the **setFilesUpForTesting** function below. Just change this. 
    files: setFilesUpForTesting(), 

    ... the rest of file 
} // end of module!!!!! 

- >今モジュールの下に、同じkarma.config.jsにファイルには、追加、次の

// ------------------------------------------------------------------ > 
// Below code is for running either single or all test files. 
// To run a single test, just pass in the test file name like so... 

// If the test file name was rs-test-me-now_test.js 
// To spool up Karma you would enter 

// gulp karma --single-test=rs-test-me-now 

// To just run all tests 
// gulp karma 

var fixedPath = [ 
    'public/js/jquery.js', 
    'public/js/jquery-ui.min.js', 
    'public/js/foundation.min.js', 
    'public/js/angular.min.js', 
    'public/js/angular-mocks.js', 
    'public/js/angular-route.min.js', 
    'public/js/angular-sanitize.min.js', 
    'public/js/angular-cookies.js' 
    // all the files you want to include when tests run. I removed most of mine, but left some for reference. 
]; 

var baseTestPath = 'public/test/'; // This is the path from root to your test/spec folder that contains all your tests. 

function setFilesUpForTesting(){ 
    fixedPath.push(testPath()); 
    return fixedPath; 
} 

function testPath(){ 
    return singleTestPath() || fullTestPath(); 
} 

function fullTestPath(){ 
    // If your root folder was butter, and all your tests were labeled 
    // like my_file_spec.js, and all your specs were in a folder under root 
    // called bread, then the path below would be 
    // 'butter/bread/**/*_spec.js' Got it? 
    return 'public/test/**/*_test.js'; // change this to suit your path. 
} 

function singleTestPath(){ 
    var passedArgument = process.argv.filter(function(item){ if(/--single-test=/.test(item)){return item; }}); 
    if(isEmpty(passedArgument)){ return false; } 
    return baseTestPath + '**/*' + fileName(passedArgument) + '_test.js'; 
    // change above to fit your path. 
} 

function fileName(argument){ 
    if(!argument){ return; } 
    return argument[0].replace('--single-test=', ''); // Change single-test if you want to. 
} 

function isEmpty(array){ 
    return array.length === 0; 
} 

テストを実行するときは、次のコマンドを実行します。

単一ファイルテスト 一気カルマ--single-テスト用

=テスト・ミー今

// when test-me-now_test.js is the file name. 
// and root/pulblic/test/ has all my test files and test folders. 
// or root/bread/butter/ and file is called test-me-now_spec.js as in the other example I gave above. 

ホープこれは誰かに役立ちます。あなたがそれを起動して実行することができない場合、質問をしてください。

UPDATEは

私は、コマンドラインからカルマを使用し、これも同様にがぶ飲みを使用した場合、上述したように動作します。

カルマは、あなたがkarma.config.jsは、上記のファイルを実装している場合、あなたが今、これを行うことができ、コマンドラインからアクセス可能である場合

...

注:私はカルマを使用する必要がはない実行を開始

karma start (will run all tests) 
// or for a single test file 
karma start --single-test=my-test-file-name // but without the _test.js or _spec.js whatever you call your files. I had reasons for doing this, but you can change the functions above to accept the complete file name if needed. 

注:ALSできる

o --single-test = で " - "の後の文言を変更して、私が共有したkarma.config.js情報を更新してください。

+0

'start'がまだすべて実行されている彼らのテストでは、 'karma.config.js'に' browsers'要素がないことを確認します。これにより、すべてのテストを実行して終了することができます。 – stripybadger

1

サーバーを稼働させるのはかなり簡単です。あなたがする必要があるのは、karma.conf.jsファイルを変更することだけです。次の行を追加すると、テストを実行せずにサーバーが起動します。

singleRun : true

は、実行時に今では、サーバーの準備ができますが、実際に任意のテストを実行しません。また、実行準備が整ったブラウザウィンドウも表示されます。 デバッグを押すと、テストの実行が開始されます。

enter image description here

私は、個々のテストを実行しようとしたことがありませんが、私はちょうど自分自身でkarma runを使用すると、私のサーバー上でそれらのすべてをトリガーすることを確認しました。だから、もしあなたがkarma runでセットダウンを制限すれば、あなたはソートされるべきです。

0

解決策があるので、自分自身で答える:フォーカステスト(https://jasmine.github.io/2.1/focused_specs.html)。

あなたは、単一のテストスイートを実行するためにfdescribe()であなたのdescribe()を置き換えることができ、または単一のテストを実行するためにあなたがfit()it()を置き換えることができます。

fit("This test is executed on its own because it is prefix with f (focus test)", (done) => { 
    done(); 
}); 
関連する問題