类型错误:axios.get不是一个函数?

11

不确定为什么会出现以下错误:

TypeError: axios.get is not a function

    4 |
    5 | export const getTotalPayout = async (userId: string) => {
  > 6 |   const response = await axios.get(`${endpoint}get-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(`${endpoint}get-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
};
4个回答

19
请查看:MDN 如上所述,您需要一个变量来收集default export和其余的内容作为X。在这种情况下,您可以这样做:
import axios, * as others from 'axios';

这里的 X 代表 其他人

而不是

import * as axios from 'axios';

假设:... from 'axios'是指您的Jest模拟。


12

使用 import Axios from "axios"; 替代 import { Axios } from "axios";


1
使用这种格式,小写字母a对我很有效:import axios from "axios" - Matt Jaf

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的导出结构,因为您正在使用它。


1
你能再解释一下吗?所以,不是默认导出,而是导出{}对象?或者是命名导出?另外,我认为我正在使用axios的那种结构,只有get目前很重要。 - Leon Gaban

2
你需要像这样导入axios:
import axios, * as others from 'axios';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接