TypeError:在* .test.js文件

时间:2019-05-15 07:56:35

标签: javascript unit-testing mocking jestjs axios

我尝试像这样在测试文件中模拟axios模块

// mycomponent.test.js
import axios from 'axios';

jest.mock('axios', () => ({
  get: jest.fn(() => Promise.resolve({ data: 'data' })),
  default: jest.fn(() => Promise.resolve({ data: 'data' })),
}));

但是在我将jest.mock('axios')添加到测试文件后,出现了这样的错误。

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

      55 |       this.props.updateGlobalLoading(true);
      56 | 
    > 57 |       axios({
         |       ^
      58 |         method: 'get',
      59 |         url: '/v1/api/portal-xml-list',
      60 |       }).then((res) => {

那么,对于axios模拟设置中遗漏的任何内容,我应该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果要模拟模块的默认导出和命名导出(在这种情况下为axios),则必须在返回值中启用属性__esModule

jest.mock('axios', () => ({
    __esModule: true,
    get: jest.fn(() => Promise.resolve({ data: 'data' })),
    default: jest.fn(() => Promise.resolve({ data: 'data' })),
}));

或者,似乎您只使用默认导出axios,所以可以将默认导出模拟为:

jest.mock('axios', () => jest.fn(() => Promise.resolve({ data: 'data' })));