Jest PR

テストのリトライについて(jest.retryTimes)

記事内に商品プロモーションを含む場合があります

今回はJestのリトライについて解説します

jestでのテストでは、たまに落ちるテストなどありますよね。

  • ネットワークや内部処理の関係でタイムアウトしてしまう…
  • 読み込みが非同期に行われるため、タイミングによってはNGなど

その際には『リトライ処理』が有用で、Jestにも用意されています。

ただJest単体ではリトライはできないため、パッケージを追加する必要があります。

$ 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で初期化してから書くようにしましょう