【问题标题】:How to mock environment variable check from function initialization before test?如何在测试前从函数初始化中模拟环境变量检查?
【发布时间】:2022-01-21 17:41:45
【问题描述】:

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

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 部分进行设置,它仍然会失败。不知何故,函数dec 的调用早于beforeAll。如何在调用dec之前在测试中设置NAMESPACE变量?

【问题讨论】:

  • 您不应该在装饰器函数中读取环境变量。将其作为配置传递。这样,在测试中模拟也将变得更加简单。整体设计更好。

标签: typescript jestjs


【解决方案1】:

在 jest 中,您可以配置在测试之前和 jest 挂钩之前运行的设置文件(“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

【讨论】:

    猜你喜欢
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 2021-06-11
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多