VitestでsetTimeoutやsetIntervalなど時間が関与したコードのテストを記述する
VitestではFake Timer APIを利用することで時間に依存するコードを柔軟に且つ短時間でテストすることができる。
Table of Contents
Fake Timer API
Vitestでは、次のようにして時間を能動的にコントロールしたテストを記述することができる。
beforeEach(() => {
vi.useFakeTimers();
});
afterEach(() => {
vi.useRealTimers();
});
it("...", () => {
// Arrange...
// Act...
vi.advanceTimersByTime(150);
// Assert...
});
他にも多くのメソッドが提供されている。
https://vitest.dev/api/vi.html#fake-timers
他のフレームワークにおけるAPI
他のテストフレームワークでも同様の機能を提供しているものがある。
Jest Timer Mocks
Vitestと同様のAPIが提供されている。
https://jestjs.io/ja/docs/timer-mocks
jest.useFakeTimers();
it("...", () => {
// Arrange...
// Act...
jest.advanceTimersByTime(1000);
// Assert...
});
Playwright Clock API
PlaywrightではClock APIを利用することで時間を操作することが出来る。
https://playwright.dev/docs/api/class-clock
test("...", async ({ page }) => {
// Arrange...
await page.clock.install({ time: new Date("2001-01-01T00:00:00") });
// Act...
await page.clock.runFor("00:10");
// Assert...
});