私はケンカのテストをジェンキンズで実行しています。 通常、テストに失敗すると、テスト名とテスト番号が表示されますが、場合によっては数字だけが表示される場合もあります。カルマはどのような順序でテストを実行しますか?
カルマは特定の順序でテストを実行しますか?アルファベット順に?
以下は、jenkinsでの私のコンソール出力のスクリーンショットです。
私はケンカのテストをジェンキンズで実行しています。 通常、テストに失敗すると、テスト名とテスト番号が表示されますが、場合によっては数字だけが表示される場合もあります。カルマはどのような順序でテストを実行しますか?
カルマは特定の順序でテストを実行しますか?アルファベット順に?
以下は、jenkinsでの私のコンソール出力のスクリーンショットです。
これは、テストが実行される順序を決定カルマ自体ではありません。 は、主にがテストの順番を決定するコンポーネントで、カルマで使用することを決めたテストランナーです。モカを使用する場合は、モカのロジックが使用されます。ジャスミンを使用する場合は、ジャスミンのロジックが使用されます。他のものを使用すると、他のロジックが使用されます。
たとえば、Mochaは、テストファイルでdescribe
とit
が呼び出された順番でテストを実行します。 2つのテストファイルa.js
とb.js
とa.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は後のテストを実行しようとしませんでした。