【问题标题】:mocking imports that contain both named and a default export模拟包含命名和默认导出的导入
【发布时间】:2018-08-26 00:28:38
【问题描述】:

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

下面的代码以简化的方式说明了应用程序。

utils.js

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

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

export default mock2svc;

comp.js(仅供参考,应用渲染良好)

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

comp-test.js

我可以测试默认导出:

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

产生错误:

TypeError: (0 , _mockUtils.mock1svc) 不是函数

或测试命名导出:

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

产生错误:

TypeError: (0 , _mockUtils.default) 不是函数

【问题讨论】:

    标签: node.js mocking jestjs


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-06-25
      • 2021-01-08
      • 2021-05-09
      • 2018-07-25
      • 2022-07-10
      • 2023-01-25
      • 2022-01-18
      • 2016-08-02
      • 1970-01-01
      相关资源
      最近更新 更多