【Vitest】setTimeoutした処理をモック化したタイマーでテストする

function someAct() {
setTimeout(() => {
someProcess();
}, 5000);
}

setTimeoutなどの非同期処理を Vitest でテストしたい際。

describe("some describe", () => {
beforeEach(() => {
vi.useFakeTimers();
});
afterEach(() => {
vi.useRealTimers();
});
it("5秒後にxxされる", () => {
someAct();
vi.advanceTimersByTime(5000); // 5秒進める
someAssert();
});
});

vi.useFakeTimers()でタイマーをモック化し、vi.advanceTimersByTime()でタイマーを進める。テスト後はvi.useRealTimers()でタイマーを破棄する必要がある。