如何在测试前从函数初始化中模拟环境变量检查?

How to mock environment variable check from function initialization before test?

我有一个装饰函数,可以从环境变量中获取一些数据。所以一开始我检查这个环境变量是否设置了。

function dec(target: Object, key: string | symbol, descriptor: PropertyDescriptor) {
  if (!process.env.NAMESPACE) {
    throw new Error('The environment variable NAMESPACE was not set.');
  }
  ...
}

然后我将这个装饰器用于一个函数。

@dec
function foo() {
...
}

我尝试使用 jest 单元测试来测试函数 foo()。如果我没有在笔记本电脑上设置 NAMESPACE 变量,测试将失败。如果我尝试在 beforeAll 部分设置它,它仍然会失败。不知何故,函数 decbeforeAll 更早被调用。如何在 dec 调用之前在测试中设置 NAMESPACE 变量?

开玩笑,您可以在测试之前和开玩笑挂钩(“beforeAll / beforeEach”)之前配置 运行 的安装文件。

jest.config.js(或 .ts)中你有一个 setupFiles 属性.

您只需添加 jest.config.js :

{
    ...
    setupFiles: ['<rootDir>/jest.setup.js'],
}

jest.setup.js 中,只需添加所有环境变量以进行测试:

process.env.NAMESPACE = 'Test-Namespace';

你最终可以使用 setupFilesAfterEnv 属性 是需要的。顺序是: setupFiles > setupFilesAfterEnv > beforeAll > beforeEach > afterEach > afterAll