0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Jest でタイムゾーン考慮

Last updated at Posted at 2022-01-24

概要

  • 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);
  });
});

読んだ記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?