私はモカユニットテストスイートを持っています。
それらをローカルで実行すると、すべて正常に動作します。Jenkins CI サーバーでそれらを実行すると、失敗することもあれば、成功することもあります。
なぜ彼らが失敗したのかを再現することはできません。この動作の原因は何ですか?
私はモカユニットテストスイートを持っています。
それらをローカルで実行すると、すべて正常に動作します。Jenkins CI サーバーでそれらを実行すると、失敗することもあれば、成功することもあります。
なぜ彼らが失敗したのかを再現することはできません。この動作の原因は何ですか?
テストはさまざまな理由で断続的に失敗する可能性があり、失敗の理由を特定することで、多くの場合、コードベースと環境が明らかになります。
いくつかの考えられる原因を次に示します。
• 共有オブジェクト - 状態を保持するシングルトンは、テスト環境が既知の状態にリセットされていない場合、テスト間で問題を引き起こす可能性があります。テスト ランナーが非決定論的な順序でテストを実行すると、破損した状態の問題を実際に公開しているランダム エラーが表示される場合があります。
• 環境と外部の依存関係 - 状態を保持できる外部オブジェクトは、予期しない結果を引き起こす可能性があります
• タイミング - タイムアウトやスレッド スリープが具体的すぎるテストが書かれていることがあります。ビルド サーバーが高負荷で動作している場合、これらのタイムアウトは十分な長さではない可能性があります。
一般的なガイダンスとして、テストは次のようにする必要があります。
エグゼキューターの数を 1 に減らして、問題を絞り込もうとします。テストがまだ断続的に失敗する場合は、Test Run Warが発生しています。それ以外の場合 (ローカルで正常に実行されている場合)、 Resource Leakageのように見えます。
詳細については、 http: //xunitpatterns.com/Erratic%20Test.htmlを参照してください。
私はで働いていjest
ます。私の問題は、モックデータが原因でテストが断続的に失敗することでした。モックをクリアし、それぞれの内部で偽のタイマーを使用するとdescribe
、問題が解決しました。
describe("my test", ()=> {
beforeAll(() => {
jest.setTimeout(30000);
jest.useFakeTimers();
});
afterAll(() => {
jest.useRealTimers();
});
beforeEach(() => {
jest.clearAllMocks();
});
it("my test", async()=>{....})
...
})