Vitest(jest)でuseFakeTimers()を使うとPromiseが動かなくなる
以下のコードを実行すると`Error: Test timed out in 5000ms.」となる。
vi.useFakeTimers()
await waitFor(() => {
...
})
解決策: advanceTimers
を設定する
// xxx.spec.ts
const user = userEvent.setup({
advanceTimers: vi.advanceTimersByTime // userEventにtimerをセット
})
beforeEach(() => {
// ワークアラウンド!!
// https://github.com/testing-library/user-event/issues/1115
(globalThis as any).jest = {
advanceTimersByTime: vi.advanceTimersByTime.bind(vi)
}
vi.useFakeTimers()
vi.setSystemTime('2024-01-01T00:00:00')
})
afterEach(() => {
vi.useRealTimers()
})
test('xxxx', async () => {
await user.click(...) // userEventの代わりに最初にsetupしたものを使う
await waitFor(() => {
expect(...).toBe(...)
})
})