ローカルタイムゾーンをモックするためのライブラリである「timezone-mock」を用いることで、
テストごとにローカルタイムゾーンを差し替えて実行します。
手順
以下のコマンドを実行して、必要なパッケージをインストールする。
npm install -D timezone-mock
ファイルを作成し、以下のように編集する。
import timezoneMock from 'timezone-mock';
import { getNowDate } from '../service/dateService';
describe('getNowDate: 現在時刻を文字列として取得する', () => {
beforeEach(() => {
jest.useFakeTimers();
});
afterEach(() => {
jest.useRealTimers();
});
test("タイムゾーン:JSTで実行すると、文字列'20230101000000'を返す", () => {
// 現在時刻を2023年1月1日00:00:00(JST)として、JSTでの現在時刻を取得する
timezoneMock.register('Etc/GMT-9');
const mockDate = new Date('2023-01-01T00:00:00');
jest.setSystemTime(mockDate);
expect(getNowDate()).toBe('20230101000000');
timezoneMock.unregister();
});
test("タイムゾーン:UTCで実行すると、文字列'20230101090000'を返す", () => {
// 現在時刻を2023年1月1日00:00:00(UTC)として、JSTでの現在時刻を取得する
timezoneMock.register('UTC');
const mockDate = new Date('2023-01-01T00:00:00');
jest.setSystemTime(mockDate);
expect(getNowDate()).toBe('20230101090000');
timezoneMock.unregister();
});
});
参考
- 【JavaScript】Date オブジェクトのタイムゾーンを差し替えてテストする – Qiita
https://qiita.com/frozenbonito/items/b64c0cf6e3a6b8ff257d - Jimbly/timezone-mock: A JavaScript library to mock the local timezone
https://github.com/Jimbly/timezone-mock