首页 > 解决方案 > Dotenv 加载环境但 Jest 不读取它们

问题描述

背景

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

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

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

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

问题

正在设置环境,但正在运行的任何 Jest 测试都没有读取它们。

尝试过

我研究了这个问题,它让我能够设置环境变量,但它与使用它们的问题无关。

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

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

问题

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

根据上面的 SO 帖子,我得到印象 envs 可以在 Jest 测试中设置和使用。为什么我无法使用它们?我的文件设置方式可能是配置问题吗?

标签: testingjestjsenvironment-variablesdotenv

解决方案


也许您已经找到了解决方案。.env.test我在为我的“创建反应应用程序”的文件中使用环境变量运行测试时遇到了自己的困难。最后,所需要做的就是在我的 package.json 文件中的 cmd 行脚本中添加所需 env 文件的路径:

    "test": "react-scripts test dotenv_config_path=.env.test",

无需进一步配置。

但是可能会有一些来自“创建反应应用程序”的预设。我对此并不完全确定。

所以,要回答你的问题:也许你可以把你的环境变量放在一个单独的文件中,然后通过你的运行测试脚本加载。


推荐阅读