【发布时间】:2019-06-08 06:39:21
【问题描述】:
如果一个模块是通过 jest 模拟的,我有什么方法可以在运行时找出?
由于通常需要模拟模块,因此代码会被执行(如下所示:jest module executed even when mocked
我们需要这个,因为我们对每个文件进行了检查,以便在未设置强制环境变量时提前失败,这会导致即使模块被模拟,我们的测试也会失败。
if (!process.env.SOME_ENV) {
throw new Error(`Mandatory environment variable 'SOME_ENV' not set`)
}
我们正在寻找这样的东西:
if (!process.env.SOME_ENV && utils.isNotMocked(this)) {
throw new Error(`Mandatory environment variable 'SOME_ENV' not set`)
}
其中utils.isNotMocked(this) 是检查模块当前是否被模拟的魔术函数。
【问题讨论】:
-
您最不想要的就是让您的被测代码知道它正在被测,您是否尝试过设置
process.env.SOME_ENV在导入模块之前? -
当然可以,但是我们使用了很多这样的环境变量,而模拟的全部意义在于我们不想处理模拟模块的内部工作。将所有环境变量设置为虚拟值需要一些额外的不必要的努力。关于“你想要的最后一件事是让你的被测代码知道它正在被测试”我同意你的观点,但我也不希望一个模拟模块被执行。恕我直言,这是开玩笑的设计缺陷。
标签: node.js unit-testing mocking jestjs