node.js - 模拟包含命名和默认导出的导入

标签 node.js mocking jestjs

我有一个实用程序文件,其中包含许多导出以及默认导出。命名和导出默认值都在同一个组件中使用。我无法确定如何在同一个测试中针对命名组件和默认组件编写测试。
下面的代码以简化的方式说明了该应用程序。
实用程序.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>
)
比较测试.js
我可以测试默认导出:jest.mock('../mock-utils', () => jest.fn());产生的错误:

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


或测试命名导出:
jest.mock('../mock-utils', () => ({
  mock1svc: jest.fn(),
  mock2svc: jest.fn(),
}));
产生的错误:

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

最佳答案

utils模块正在导出一个对象。您应该能够创建该对象并为其分配 .default像这样:

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

  return mockUtils
});

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

关于node.js - 模拟包含命名和默认导出的导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49329198/

相关文章:

javascript - 如何使用 Jest 正确实现这样的测试套件架构?

javascript - 在 VSCode 中使用 require 和根路径变量

javascript - 从 Seuquelize 返回然后 JavaScript 中的代码块

node.js - 无法加载c++ bson扩展,使用纯JS版本

javascript - 为什么控制流不遵循代码执行顺序?

javascript - 在相对路径上开 Jest

c# - Moq、抽象类和虚拟属性

vue.js - Vuex with Jest - this.$store.getters.<getterName> 不是函数

javascript - 具有依赖关系的 Jest 单元类