[Typescript]Jestでシステム日時を固定する

Jestを利用したテストを行う場合に日付を固定したい時は下記のようにします

jest.useFakeTimers().setSystemTime(new Date('設定する日付').getTime());

これでテスト中のシステム日付がsetSystemTimeに指定した日付になります
また、変更したシステム日付を元の日付に戻したい場合は下記のようにします

jest.useRealTimers();

テストで確認する

実際にJestでテストをしてみます
下記では、テストごとにシステム日付を元に戻しています。

describe('システム日付のテスト', () => {
  afterEach(() => {
    jest.useRealTimers();
  });

  it('日付テスト', async () => {
    jest.useFakeTimers().setSystemTime(new Date('2022-11-01').getTime());
    const today = new Date();
    const expectDate = new Date('2022-11-01');
    expect(today).toEqual(expectDate);
  });
});

このように利用すれば日付テストのテスト中はシステム日付が2022年11月1日に変更され、afterEachを利用することでテストが終わるごとに実際のシステム日付に変更にできます。

参照)useRealTimersuseFakeTimerssetSystemTime