≪ Today I learned. RSS購読
公開日
タグ
JavaScript
著者
ダーシノ(@bc_rikko)

VitestでPromiseを返すメソッドのテストで警告が出る

Promise returned by expect(actual).resolves.toEqual(expected) was not awaited. Vitest currently auto-awaits hanging assertions at the end of the test, but this will cause the test to fail in Vitest 3. Please remember to await the assertion.

VitestでPromiseを返すメソッドをテストするときに、上記のような警告がでる。要約すると「Vitest@2では自動でawaitするけど、Vitest@3になったら失敗するよ」という内容。

問題のテストコード

test('Promiseを返すメソッドをテストする', () => {
  const fetchList = async () => {
    return new Promise((resolve) => {
      resolve([
        { item: 'test1' },
        { item: 'test2' },
      ])
    })
  }

  expect(fetchList()).resolves.toHaveLength(2)
})

解決策

expect().resolvesexpect().rejectsを使うと、続くテストメソッドがPromise<void>を返すようになるため、expectの前にawaitをつけることで警告が解消できる。

test('Promiseを返すメソッドをテストする', async () => {
  const fetchList = async () => {
    return new Promise((resolve) => {
      resolve([
        { item: 'test1' },
        { item: 'test2' },
      ])
    })
  }

  await expect(fetchList()).resolves.toHaveLength(2)
})