如何监视默认导出的单个功能

时间:2020-06-08 07:29:45

标签: javascript unit-testing jestjs

我试图监视我实际测试的功能所使用的功能,所以结构有点像这样:

const trueOrFalse = (args) => {
  return true // or false;
}

export default TrueOrFalse;

以及我想要导入的功能

import trueOrFalse from './trueOrFalse';

const myFunc = () => {
  const successful = trueOrFalse();
  if (!successful) return;
  // Otherwise do something else
}

为了进行测试,现在我需要trueOrFalse()始终返回false。如果导出方式不同,我将可以像这样使用jest.spyOn

  jest.spyOn(utils, 'trueOrFalse').mockImplementation(() => false);

但是这是默认导出,我不能这样做吗?

  jest.spyOn(???, 'trueOrFalse').mockImplementation(() => false);

如何监视或嘲笑此依赖函数?

1 个答案:

答案 0 :(得分:0)

可能会监视或模拟模块对象上的函数:

import * as trueOrFalseMod from './trueOrFalse';

...

jest.spyOn(trueOrFalseMod, 'default');

之所以可行,是因为ES导入始终在内部导入后引用对象属性。如果模块对象根据ES模块规范是只读的,则这可能无法正常工作,这取决于特定的Jest设置。

否则,需要对模块进行模拟:

import trueOrFalse from './trueOrFalse';

jest.mock('./trueOrFalse');

这应该导致trueOrFalse是一个存根,可以根据测试来更改实现:

trueOrFalse.mockReturnValue(false);