🏸
時刻を表示させるReact ComponentのスナップショットテストがGithub actionsでだけ落ちる
現象
ある時刻を表示させるReact componentを作成
Component.tsx
// 2022/3/8
const date = props.date.toLocaleDateString()
// 18:39:04
const time = props.date.toLocaleTimeString()
ある固定のDateを流し込み、スナップショットテストを実行
Component.test.tsx
const time: Date = new Date(1647165901000)
const { asFragment } = render(
<Component
time={time}
/>,
)
expect(asFragment()).toMatchSnapshot()
ローカルでスナップショットを作成しテストの動作を確認。
その後、github actions上でpushの度にスナップショットテストを実施させたところ、
コード修正を行っていないのに以下のようなエラーでテストが失敗した。
Snapshot name: `時刻を表示させるcomponentのテスト`
- Snapshot - 1
+ Received + 1
@@ -100,11 +100,11 @@
- 2022/3/8 18:39:04 NG
+ 3/8/2022 09:39:04 AM NG
そうか、、github actionsサーバはJSTじゃないですね。。。
対策
- テスト用に生成する時刻をサーバのtimezoneに依存しないようにする。
getTimezoneOffset()についてはこちらComponent.test.tsx// const time: Date = new Date(1647165901000) const time: Date = new Date( 1647165901000 + (new Date().getTimezoneOffset() + 9 * 60) * 60 * 1000) )
- 表示形式を日本式に統一Component.tsx
// 2022/3/8 // const date = props.date.toLocaleDateString() const date = props.date.toLocaleDateString('ja-JP') // 18:39:04 // const time = props.date.toLocaleTimeString() const time = props.date.toLocaleTimeString('ja-JP', {hour12: false})
言われてみれば当たり前なんですが、意外と気づけなかったです。
Discussion