Dotenv加载env,但Jest不读取它们

时间:2019-11-29 23:57:36

标签: testing jestjs environment-variables dotenv

背景

我正在使用process.env.<ENV NAME>在某些类中设置变量。我需要在测试中设置它们以设置类变量,否则测试将失败。

当前,我在beforeAll()钩子中设置变量。但是,有许多测试文件必须在其中设置这些env。如果不需要,我不想在所有这些文件中复制此代码。

我认为最好在每次测试之前通过Jest设置文件进行设置。在jest.config.js中,我添加了setupFiles: ['<rootDir>/jestSetupTest.js']。在此文件中,我添加了require('dotenv').config().env文件位于根目录中。

我在两个不同的目录中分别有测试文件:./src/graphql/__tests__./src/utils/__tests__

问题

正在设置env,但是任何正在运行的Jest测试都不会读取它们。

尝试

我调查了this issue,这使我可以设置环境变量,但与使用它们有关的问题无关。

我已将require('dotenv').config()添加到使用envs的测试文件中,但这仍然无法正常工作。这让我感到惊讶,我认为至少这会设置环境。

我在Jest上设置了--debug,但没有显示是否设置了环境。

问题

有人知道发生了什么吗?或者如何进一步诊断这个问题?

我得到的印象环境可以根据上述SO帖子在Jest测试中设置和使用。为什么我不能使用它们?可能是我的文件设置方式出现配置问题吗?

1 个答案:

答案 0 :(得分:1)

也许您已经找到了解决方案。我在自己的“创建反应应用”中很难从function isEmail(y) { var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(String(y).toLowerCase()); } 文件中的env变量运行测试。最后,所需要做的就是在我的package.json文件中的cmd行脚本中将路径添加到所需的env文件:

.env.test

不需要进一步的配置。

但是“ create react app”可能会有一些预设。我对此不太确定。

因此,要提出一个问题:也许您可以将env变量放在单独的文件中,然后通过运行测试脚本进行加载。