2017-06-02 21 views
5

私はケンカのテストをジェンキンズで実行しています。 通常、テストに失敗すると、テスト名とテスト番号が表示されますが、場合によっては数字だけが表示される場合もあります。カルマはどのような順序でテストを実行しますか?

カルマは特定の順序でテストを実行しますか?アルファベット順に?

以下は、jenkinsでの私のコンソール出力のスクリーンショットです。

enter image description here

答えて

4

これは、テストが実行される順序を決定カルマ自体ではありません。 は、主にがテストの順番を決定するコンポーネントで、カルマで使用することを決めたテストランナーです。モカを使用する場合は、モカのロジックが使用されます。ジャスミンを使用する場合は、ジャスミンのロジックが使用されます。他のものを使用すると、他のロジックが使用されます。

たとえば、Mochaは、テストファイルでdescribeitが呼び出された順番でテストを実行します。 2つのテストファイルa.jsb.jsa.jsが最初に実行された場合、最初にMochaはa.jsのテストを実行します。最初にb.jsが実行されると、Mochaは最初にb.jsのテストを実行します。 Mochaはこれ以上ソートを行いません。 (Mochaにはsortオプションがありますが、mochaコマンドラインツールを使用してノードでMochaを実行する場合にのみ使用します)KarmaはブラウザでMocha を実行するため、Mochaはサポートしません。sort

テストファイルを動的にロードするためにモジュールローダー(RequireJSまたはSystemJSなど)を使用すると、この作業が複雑になります。require(["a", "b"])を実行していて、2つのモジュールが互いに依存していない場合、読み込まれる順序は不定です。 aが最初にロードされるか、またはbが最初に読み込まれる可能性があります。そのため、テストの実行順序は実行ごとに一貫しない可能性があります。設定または番号requireコールのネストによって、注文を強制することができます。 (例えば、再びお互いに依存しないモジュールを想定し、require(["a"],() => require("b"))aでテストがbのものの前に実行されることを保証する。)

さらに合併症が彼らならば、いくつかのテストランナーは、テストの実行を中止することですテストスイートがバグであることを確認してください。これはテストの順序を変更しませんが、テストが欠落しているように見える場合があります。たとえば、Mochaは、テスト・データのセットアップと分解(テスト自体のエラーとは反対に)に使用されるフックのエラーをテスト・スイートのエラーとみなし、実行を中止します。 3つのテストが失敗したセットアップコードに依存する場合、Mochaはテストをスキップします。 3回のテストのうち1回の失敗が表示されますが、3回の失敗は表示されません。ここには、3つのテストとbeforeフックの失敗を伴うテストファイルのサンプルがあります。 (beforeフック、別名「before all」は、一連のテストの前にテストデータを設定するためのものです。)

before(() => { 
    throw new Error("oh no!"); 
}); 

it("one",() => {}); 

it("two",() => {}); 

it("three",() => {}); 

ここに私のkarma.conf.jsです:

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['mocha'], 
    files: [ 
     'test.js' 
    ], 
    exclude: [ 
    ], 
    preprocessors: { 
    }, 
    reporters: ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: false, 
    browsers: ['Chrome'], 
    singleRun: false, 
    concurrency: Infinity 
    }) 
} 

ここで(私は<ts>とタイムスタンプを交換しました)出力です:

<ts>:INFO [karma]: Karma v1.7.0 server started at http://0.0.0.0:9876/ 
<ts>:INFO [launcher]: Launching browser Chrome with unlimited concurrency 
<ts>:INFO [launcher]: Starting browser Chrome 
<ts>:INFO [Chrome 58.0.3029 (Linux 0.0.0)]: Connected on socket qfNuMyp4q3SyUBOsAAAA with id 24880742 
Chrome 58.0.3029 (Linux 0.0.0) "before all" hook FAILED 
     Error: oh no! 
      at Context.before (test.js:3:11) 
Chrome 58.0.3029 (Linux 0.0.0): Executed 1 of 3 (1 FAILED) ERROR (0.013 secs/0.001 secs) 

それはので、 "3の1を実行した" と言いますそれは最初のテストを実行しようとしましたが、この試行はbeforeフックで失敗しました。そのため、Mochaは後のテストを実行しようとしませんでした。

関連する問題