如何使用Jest模拟非默认导入

时间:2018-11-13 19:17:55

标签: javascript unit-testing testing jestjs

如何模拟正在包含要测试的功能的文件中导入的功能?

而无需将其放入 mocks 文件夹中。

// FileIWantToTest.js
import { externalFunction } from '../../differentFolder';

export const methodIwantToTest = (x) => { externalFunction(x + 1) }

我需要确保调用externalFunction并以正确的参数调用它。

似乎超级简单,但文档中没有介绍如何通过将模拟文件放入 mocks 文件夹中的模拟文件来模拟测试中的所有文件。

2 个答案:

答案 0 :(得分:0)

解决方案:我需要将jest.mock调用带到任何测试或任何其他函数之外,因为jest需要提升它。对于像我这样的命名导出,我还必须使用以下语法:

jest.mock('../../differentFolder', () => ({
  __esModule: true,
  externalFunction: jest.fn(),
 }));

答案 1 :(得分:0)

最简单的方法之一是导入库并使用jest.spyOn来监视该方法:

import { methodIwantToTest } from './FileIWantToTest';
import * as lib from '../../differentFolder';  // import the library containing externalFunction

test('methodIwantToTest', () => {
  const spy = jest.spyOn(lib, 'externalFunction');  // spy on externalFunction
  methodIwantToTest(1);
  expect(spy).toHaveBeenCalledWith(2);  // SUCCESS
});