Open11

JestのFake Timers

makototmakotot

https://jestjs.io/ja/docs/jest-object#fake-timers
偽のタイマーをJestが使うようにする。
jest.useFakeTimers()を使う。

makototmakotot

jest.useFakeTimersを使うと、↓は偽のタイマーから値を返す実装に置き換わる

  • Date
  • performance.now()
  • queueMicrotask()
  • setImmediate()
  • clearImmediate()
  • setInterval()
  • clearInterval()
  • setTimeout()
  • clearTimeout()
makototmakotot

環境によって以下も同様に置き換わる。

  • Node
    • process.hrtime
    • process.nextTick()
  • JSDOM
    • requestAnimationFrame()
    • cancelAnimationFrame()
    • requestIdleCallback()
    • cancelIdleCallback()
makototmakotot

useFakeTimersのオプション

type FakeTimersConfig = {
  advanceTimers?: boolean | number;
  doNotFake?: Array<FakeableAPI>;
  legacyFakeTimers?: boolean;
  now?: number | Date;
  timerLimit?: number;
};
makototmakotot

jest.useRealTimers()を呼ばない限り同じテストファイル内ではjest.useFakeTimers()の偽のタイマーが生き続ける。
同じファイル内のどこで呼ぶこともできるけど、それがファイル内のテスト全体に影響する。

makototmakotot

jest.useRealTimers()を呼べばオリジナルの実装に戻る。

makototmakotot
makototmakotot

LegacyFakeTimersModernFakeTimersがある

export {default as LegacyFakeTimers} from './legacyFakeTimers';
export {default as ModernFakeTimers} from './modernFakeTimers';

LegacyFakeTimers@sinonjs/fake-timersに依存していないタイマー実装。