繁体   English   中英

TypeError: (0, _axios.default) is not a function when use jest.mock('axios') inside a *.test.js 文件

[英]TypeError: (0 , _axios.default) is not a function when use jest.mock('axios') inside a *.test.js file

我尝试像这样在我的测试文件中模拟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 mocking 设置的任何东西?

谢谢!

如果你想嘲笑默认和模块(命名出口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' })));

作为@mgarcia 的回答的跟进,我在使用他/她的版本时不断收到以下错误:

ReferenceError: The module factory of `jest.mock()` is not allowed to reference 
any out-of-scope variables.
Invalid variable access: jest

该错误是由 jest.mock() 中的jest.mock() jest.fn()方法引起的。 所以我只是像这样删除它并且能够成功模拟axios

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM