开玩笑:找出当前模块在运行时是否被模拟

时间:2019-01-14 09:30:33

标签: node.js unit-testing mocking jestjs

是否有一种方法可以在运行时找出是否通过玩笑来模拟模块?

由于正常需要模拟模块,因此代码得以执行(如此处: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)是魔术函数,用于检查模块当前是否被模拟。

1 个答案:

答案 0 :(得分:0)

如@jonrsharpe所述,通常不希望软件能够区分它是否处于测试状态。这意味着,您可能在任何模拟框架中都找不到想要的功能。此外,提供这种功能可能会存在更多根本性的问题,因为您可能有混合的测试场景,其中某些测试用例使用了模拟类的对象,而其他测试用例使用了原始类的对象。 / p>

由于您将早期退出机制用作代码中的常规模式,如下所述:为该检查创建库函数怎么样-然后可以在测试过程中将其再次加倍,以便在这种情况下该函数不会扔?