TypeError:axios.get 不是函数?

Posted

技术标签:

【中文标题】TypeError:axios.get 不是函数?【英文标题】:TypeError: axios.get is not a function? 【发布时间】:2019-02-23 02:08:20 【问题描述】:

不知道为什么会出现以下错误:

TypeError: axios.get is not a function

    4 |
    5 | export const getTotalPayout = async (userId: string) => 
  > 6 |   const response = await axios.get(`$endpointget-total-payout`,  params: userId );
    7 |   return response.data;
    8 | ;
    9 |

我的服务:

import * as axios from 'axios';

const endpoint = '/api/pool/';

export const getTotalPayout = async (userId: string) => 
  const response = await axios.get(`$endpointget-total-payout`,  params: userId );
  return response.data;
;

我的笑话测试:

// import mockAxios from 'axios';
import  getTotalPayout  from './LiquidityPool';

const userId = 'foo';

describe('Pool API', () => 
  it('getTotalPayout is called and returns the total_payout for the user', async () => 
    // mockAxios.get.mockImplementationOnce(() => 
    //   Promise.resolve(
    //     data: 
    //       total_payout: 100.21,
    //     ,
    //   );
    // );

    const response = await getTotalPayout(userId);
    console.log('response', response);
  );
);

在 src/__mocks__/axios.js 我有这个:

// tslint:disable-next-line:no-empty
const mockNoop = () => new Promise(() => );

export default 
  get: jest.fn(() => Promise.resolve( data:  total_payout: 100.21 )),
  default: mockNoop,
  post: mockNoop,
  put: mockNoop,
  delete: mockNoop,
  patch: mockNoop
;

【问题讨论】:

【参考方案1】:

请看:MDN

正如那里所说,您需要一个值来收集default export,其余的为X。在这种情况下,您可以:

import axios, * as others from 'axios';

X 在这里是others

代替

import * as axios from 'axios';

假设:... from 'axios' 指的是你的笑话。

【讨论】:

【参考方案2】:

你有import * as axios from 'axios';。在这种情况下,axios 不是默认导出。你的模拟假设是这样的:

export default 
  get: jest.fn(() => Promise.resolve( data:  total_payout: 100.21 )),
  default: mockNoop,
  post: mockNoop,
  put: mockNoop,
  delete: mockNoop,
  patch: mockNoop
;

修复

删除默认导出并替换您的模拟结构以映射您正在使用的 axios 的导出结构。

【讨论】:

您能否再解释一下,而不是默认导出,只导出 对象?还是命名出口?我还以为我使用的是 axios 的结构,只有get 重要。【参考方案3】:

使用 import as import Axios from "axios";而不是从“axios”导入Axios;

【讨论】:

以上是关于TypeError:axios.get 不是函数?的主要内容,如果未能解决你的问题,请参考以下文章

在 axios GET 请求中获取空对象

Laravel 5.7 - 如何使用 axios.get 从 API 检索数据?

VUE - 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法

Axios 'Get' 函数未调用

Axios.get 返回纯 html 而不是 JSON 返回数据

无法从 axios 函数之外的 axios GET 请求响应中读取值