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().resolves
やexpect().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)
})