目的
Reactの開発環境をDockerに移行した際、jestでのユニットテストが通らなくなりました。
Dockerで特に何も設定せずにUbuntuを使用していたためb、タイムゾーンがUTCとなっていたことが原因でした。
なので、今回はコンテナ自体のタイムゾーンは変えずに、テスト実行時のタイムゾーンを固定する方法の備忘録になります。
手順
ここでは3つの方法を記載します。
どれをとっても結果は同じなので、お好みで大丈夫です。
方法1. Jest実行環境の設定ファイルにタイムゾーンを指定する
こちらの記事を参考にします。
package.json
と同階層にJestの設定ファイルjest-global-setup.js
を作成し、タイムゾーンを記述します。
jest-global-setup.js
module.exports = async () => {
process.env.TZ = 'Asia/Tokyo';
};
package.json
のjest定義に以下を追加します。
package.json
{
"jest": {
"globalSetup": "./jest-global-setup.js"
}
}
方法2. テスト実行時にタイムゾーンを指定する
yarn test
を行う際に明示的にタイムゾーンを指定します。
# TZ=Asia/Tokyo yarn test
方法3. package.jsonのtest定義にタイムゾーンを指定する
yarn test
によって実行されるスクリプトコマンドに明示的にタイムゾーンを指定します。
package.json
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "TZ=Asia/Tokyo react-scripts test", // タイムゾーンを指定
まとめ
開発環境をDockerに移す際にはここら辺も気を付けないといけませんね。。
個人的には3番目の方法がサクッとできて、かつ一度設定してやれば済むのでオススメかなと思います。