今回はJestのリトライについて解説します
jestでのテストでは、たまに落ちるテストなどありますよね。
- ネットワークや内部処理の関係でタイムアウトしてしまう…
- 読み込みが非同期に行われるため、タイミングによってはNGなど
その際には『リトライ処理』が有用で、Jestにも用意されています。
ただJest単体ではリトライはできないため、パッケージを追加する必要があります。
- jestのリトライについて … https://jestjs.io/docs/ja/jest-object#jestretrytimes
- 追加するパッケージ … jest-circus
$ npm install -D jest-circus
# or
$ yarn add -D jest-circus
Jestのテストのリトライについて(jest.retryTimes)
パッケージを追加した後、テストコードに下記を書きます
# jest.retryTimes(回数)
# 以下は例==========
jest.retryTimes(3) # 3回のやり直し
describe('テスト', () => {
it('検証内容', ()=>{
console.Error('エラーです')
})
})
このコードの例では、3回やり直します。
jest-circusはjestであれば、他のモジュールを使っていても動くため、puppeteerを使ったE2Eテストでも動かすことができます
jest.retryTimesを使う上での注意点
jest.retryTimesでリトライできますが、テストのリトライは他のテストが終わった後に行われます
『テスト2がリトライする場合』
テスト1(OK)
→テスト2(NG)
→テスト3(OK)
→テスト2(リトライ1回目)
→テスト2(リトライ2回目)
というふうになります
そのため、前の状態を引き継ぐテストの場合にはリトライで必ず失敗します
jestでリトライ処理を書く場合、beforeEachで初期化してから書くようにしましょう