如何在 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:

我尝试过的事情:

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 添加到那里的环境变量。