TypeError:(0,_axios.default)在* .test.js文件中使用jest.mock('axios')时不起作用

Var*_*kul 3 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' })),
}));
Run Code Online (Sandbox Code Playgroud)

但是,当我将其添加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) => {
Run Code Online (Sandbox Code Playgroud)

那么,我应该如何解决这个问题,而我却想为axios模拟设置任何东西呢?

谢谢!

mga*_*cia 6

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

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

另外,似乎您只使用的默认导出axios,您可以将默认导出模拟为:

jest.mock('axios', () => jest.fn(() => Promise.resolve({ data: 'data' })));
Run Code Online (Sandbox Code Playgroud)