此问题已在此处有答案:
how to reset module imported between tests(3个答案)
去年就关门了。
下面的代码在一个文件中,我试图测试:
- foo.js*
let localEnv = (process.env.LOCAL_ENVIRONMENT).toLowerCase() === 'prod' ? 'prod' : 'stage';
目前,我使用setupFiles
设置这个值,它指向env.js
,它包含:
process.env.LOCAL_ENVIRONMENT = 'prod';
我的问题是,我如何改变process.env.LOCAL_ENVIRONMENT
到test
(或任何其他)在foo.test.js
?只需要在一个测试中完成此操作,因此这一行将包含在我的测试覆盖范围中。
我试过这样做,但没有用...
foo.test.js
test('Nonprod', async () => {
process.env.LOCAL_ENVIRONMENT = 'test';
...
});
3条答案
按热度按时间dgiusagp1#
您可以尝试更改该值。然而,你必须考虑到,在你的原始文件中,你只有在第一次加载这个脚本时才能访问变量。为了使这个工作,你必须这样做:
这有一些警告,因为你不能用它测试多个场景(因为模块只加载一次)。
如果你想测试更多的场景,你有多种选择:
例如,一种方法是将逻辑和进程.env. PROFILE_ENVIRONMENT分开
这个函数现在很容易测试,并且不再依赖于环境变量
elcex8rz2#
我在这里找到了如何重置和重新要求测试模块的答案:how to reset module imported between tests
ws51t4hk3#
对于特定的测试用例,最简单的测试方法是将测试设置为描述范围,并根据您的需要在beforeAll / afterAll或beforeEach / afterEach钩子中应用/删除env值。