在 jest.mock(moduleName, factory) 工厂函数中模拟多个命名导出

Mocking multiple named exports in jest.mock(moduleName, factory) factory function

我一直在一个小项目中使用 Jest,但在使用 Jest 模拟时遇到了问题。我有一个实用程序文件,它导出命名的自定义错误构造函数。我需要在我的测试文件中模拟这些函数。我不想使用 Jest 文档中显示的手动模拟技术(即,将模拟文件放入 __mocks__),而是我想在测试文件中定义模拟。我在我的测试文件中尝试这样的事情:

const errorMock = () => {
  return {
    configNotFoundError: jest.fn(() => new Error()),
    invalidJSONError: () => jest.fn(() => new Error()),
  }
};

jest.mock('./error', errorMock);

const { configNotFoundError, invalidJSONError } = require('./error');

但我收到以下错误:

babel-plugin-jest-hoist: The second argument of `jest.mock` 
must be an inline function.

有人可以帮助我理解我做错了什么吗?

我最近在命名导出方面遇到了类似的问题。 根据 docsjest.mock 调用被提升到测试的顶部,随后在您定义 errorMock 之前执行。函数似乎被提升到这些调用之上。尝试:

function errorMock() {
  return {
    configNotFoundError: jest.fn(() => new Error()),
    invalidJSONError: () => jest.fn(() => new Error()),
  }
};

jest.mock('./error', errorMock);

const { configNotFoundError, invalidJSONError } = require('./error');