Vitestで同期にできない非同期処理をテストする

2024/08/13に公開

なにこれ

Vitestでの非同期処理に苦しんでいる人向け。

結論

waitFor使おう。

テストする処理

const someValue = ref(false);
const doSomethingInner = async () => {
  await someAsyncMethod();
  someValue.value = true; // テストしたいのはこれ
};
const doSomething = () => {
  // 非同期処理を非同期のまま実行
  doSomethingInner();
};

testコード

describe('test!', () => {
  test('doSomething', async () =>
    doSomething();
    await waitFor(() => {
      expect(someValue.value).toBeTruthy();
    });
  });
});

解説

vi.waitFor
内部処理が成功するか、テストがタイムアウトするまで待ち続ける。
なお、内部のテストが失敗する場合、もちろんタイムアウトまで処理が走り続けるので注意が必要。

まとめ

調べればわかると言えばそれまでではある。

それではまた次回。

SMARTCAMP Engineer Blog

Discussion