概要
- unixtime を取得する関数のテストを書きたかった
- ローカルと Github 上で挙動が違った(ローカルでは通るけど Github 上だと落ちた)
詳細
-
2022-01-01 01:01:01 を表す
Date
を用意 - 変換サイトを使い、 UTC+9 の状態での unixtime が 1640966461 だとわかる
- 以下の記事を参考に、そのままテストを書いた
describe("テストしたい関数名", () => {
jest.useFakeTimers("modern");
jest.setSystemTime(new Date(2022, 0, 1, 1, 1, 1));
it("", () => expect(現在時刻の unixtime を取得する関数).toBe(1640966461));
});
- 出たエラーは以下の通り
● 関数名 ›
expect(received).toBe(expected) // Object.is equality
Expected: 1640966461
Received: 1640998861
> 96 | it("", () => expect(現在時刻の unixtime を取得する関数).toBe(1640966461));
^
97 | });
98 |
修正結果
- 正しい値を UTC で計算し直した(1640998861)
-
Date
クラスで使える関数getTimezoneOffset()
でローカルと UTC のタイムゾーンのさを取得 - 差分を UTC に加える(減算しないよう注意)
describe("テストしたい関数名", () => {
jest.useFakeTimers("modern");
const date = new Date(2022, 0, 1, 1, 1, 1);
const timeZoneOffset = date.getTimezoneOffset() * 60;
jest.setSystemTime(date);
it("", () => {
expect(現在時刻の unixtime を取得する関数).toBe(1640998861 + timeZoneOffset);
});
});