jest:模拟包含命名和默认导出的导入

时间:2018-03-16 20:41:51

标签: mocking jest

我有一个实用程序文件,其中包含许多导出以及默认导出。命名和导出默认值都在同一个组件中使用。我无法确定如何针对同一测试中的命名和默认组件编写测试。

下面的代码以简化的方式说明了应用程序。如果我遗漏了一些重要的东西,请告诉我。谢谢!

utils.js

export const mock1svc = () => {
  return true;
};

const mock2svc = () => {
  return true;
};

export default mock2svc;

comp.js (fyi,app呈现正常)

import Utils, { mock1svc } from 'utils';
...
render (
    <p>{mock1svc()}</p>
    <p>{Utils()}</p>
)

COMP-test.js
我可以测试默认导出:

jest.mock('../mock-utils', () => jest.fn());

生成

错误: TypeError: (0 , _mockUtils.mock1svc) is not a function

或测试名为exports:

jest.mock('../mock-utils', () => ({
  mock1svc: jest.fn(),
  mock2svc: jest.fn(),
}));
生成

错误: TypeError: (0 , _mockUtils.default) is not a function

我尝试了各种方法,但都失败了。

非常感谢您提供的任何帮助!

纸币

1 个答案:

答案 0 :(得分:0)

utils模块正在导出对象。您应该能够创建该对象并将其分配为.default,如下所示:

jest.mock('../mock-utils', () => {
  const mockUtils = {
    mock1svc: jest.fn(),
    mock2svc: jest.fn(),
  };
  mockUtils.default = jest.fn();

  return mockUtils
});

请确保您要模拟的路径“指向”与导入语句相同的位置。