如何在 Create React App 的 jest config 中设置时区?
How do I set the timezone in jest config in Create React App?
我在我的 Create React App 应用程序中编写了一些测试,这些测试在本地通过但在 CI 由于时区差异而失败。所以我需要一种方法来为我的应用程序中的所有测试将时区设置为 UTC。我在 上尝试了这些建议,但它们没有用,可能是由于 Create React App:
我尝试过的事情:
- 将测试脚本从
react-scripts test
更改为 TZ=UTC && react-scripts test
- 将以下代码段添加到 setupTests.js:
module.exports = async () => {
process.env.TZ = 'UTC';
};
应该是"test": "TZ=UTC react-scripts test",
(没有&&)。
请注意,它仅在您从终端 运行 时有效(因为我 运行 有时会从 IDE 进行测试,然后您必须在 IDE 测试配置)。
即使有人已被接受,我也会将其添加为答案。
正如您所指出的,您所做的只是模拟一些东西。您需要做的就是让它更容易模拟。
如果你有这样的功能:
const formatTime = (time) => new Date(time).toLocaleString()
然后修改成这样:
const formatTime = (time, timezone) => new Date(time).toLocaleString(timezone)
瞧!测试它变得微不足道,因为现在您只需将参数传递给您的函数即可验证其功能。不要弄乱测试环境或任何东西。没有比测试纯函数更容易的了。
当提供 non 时,您不需要测试 toLocaleString
使用默认时区,因为那不是您的代码 - 这是您要遵守的规范。
对于 cross-platform 解决方案,您可以创建一个 .env.test
(如果尚未创建)文件并将 TZ=UTC
添加到那里的环境变量。
我在我的 Create React App 应用程序中编写了一些测试,这些测试在本地通过但在 CI 由于时区差异而失败。所以我需要一种方法来为我的应用程序中的所有测试将时区设置为 UTC。我在
我尝试过的事情:
- 将测试脚本从
react-scripts test
更改为TZ=UTC && react-scripts test
- 将以下代码段添加到 setupTests.js:
module.exports = async () => {
process.env.TZ = 'UTC';
};
应该是"test": "TZ=UTC react-scripts test",
(没有&&)。
请注意,它仅在您从终端 运行 时有效(因为我 运行 有时会从 IDE 进行测试,然后您必须在 IDE 测试配置)。
即使有人已被接受,我也会将其添加为答案。
正如您所指出的,您所做的只是模拟一些东西。您需要做的就是让它更容易模拟。
如果你有这样的功能:
const formatTime = (time) => new Date(time).toLocaleString()
然后修改成这样:
const formatTime = (time, timezone) => new Date(time).toLocaleString(timezone)
瞧!测试它变得微不足道,因为现在您只需将参数传递给您的函数即可验证其功能。不要弄乱测试环境或任何东西。没有比测试纯函数更容易的了。
当提供 non 时,您不需要测试 toLocaleString
使用默认时区,因为那不是您的代码 - 这是您要遵守的规范。
对于 cross-platform 解决方案,您可以创建一个 .env.test
(如果尚未创建)文件并将 TZ=UTC
添加到那里的环境变量。