开玩笑的模块即使被嘲笑也被执行

时间:2018-07-31 09:04:17

标签: javascript unit-testing mocking jestjs

我偶然发现,在开玩笑之后,笑话仍然执行模块。在我的情况下有副作用(echarts + zrender)。

crashingModule.js:

throw 'Module is executed';

foo = () => {
  return 'boom';
}

module.exports = foo;

crashingModule.test.js:

const foo = require('./crashingModule');
jest.mock('./crashingModule');

结果:

  

●测试套件无法运行

Error

  Module is executed

那是因为即使在嘲笑Jest的内部,run module也是如此。

是否有可能以某种方式跳过jest.mock()模拟的模块的执行?

当前解决方法:

我想出了一个包装纸:

const echarts = require('echarts');
const zrenderUtil = require('zrender/lib/core/util');

module.exports = {
  echarts: echarts,
  zrenderUtil: zrenderUtil
}

然后将哪个导入到我们的模块中以及对该模块的测试中。这样,当Jest模拟包装器时,就不会执行echarts。仅运行包装器模块,没有副作用。

0 个答案:

没有答案