Jestで非同期処理のテストをする

以下のような非同期処理があるとします。

const fetchValue = (value) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(value)
    }, 2000)
  })
}

このテストをJestでしたい場合、以下のように書いてしまうと resolve される前にテストが完了してしまいます。

test('fetch test', () => {
  fetchValue(223).then(v => {
    expect(v).toBe(222)
  })
})
// 223 と 222 で一致しないはずなのに、テスト結果はOKになる

return を追加して、Promise を返すようにすることで Jest が resolve されるまで完了を待ってくれます。

test('fetch test', () => {
  return fetchValue(222).then(v => {
    expect(v).toBe(223)
  })
})
// 期待通り failed になる