1

我一直在一个小项目中使用 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.

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

4

1 回答 1

2

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

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

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

const { configNotFoundError, invalidJSONError } = require('./error');
于 2018-01-31T16:37:24.453 回答