Typescript 中 axios 拦截器的笑话模拟失败

时间:2021-06-28 16:22:35

标签: typescript axios jestjs

我正在尝试在 Typescript 中使用 Jest 来模拟 axios 拦截器。但是,运行时出现错误:
“类型错误:无法读取未定义的属性‘请求’”在以下行:

axios.interceptors.request.use(async (config: AxiosRequestConfig) => {

这是我如何定义模拟

jest.mock('axios', () => ({
  create: jest.fn(() => ({
    get: jest.fn(),
    interceptors: {
      request: {
        use: jest.fn((handler) => { interceptorFunction = handler; }),
      },
      response: {
        use: jest.fn((handler) => { interceptorFunction = handler; }),
      },
    },
  })),
}));

任何帮助/见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

您试图访问axios的interceptors属性,但它是在create方法的返回值下定义的。因此,如果您通过 console.log 函数检查 axios.interceptors 的值,则输出必须为 'undefined' 并且您无法访问任何 'undefined' 属性。 所以,你必须改变

axios.interceptors.request.use(...)

进入

axios.create().interceptors.request.use(...)

或者像这样更改模拟实现。

jest.mock('axios', () => ({
  create: jest.fn(() => ({})),
  get: jest.fn(),
  interceptors: {
    request: {
      use: jest.fn((handler) => { //sth
      }),
    },
    response: {
      use: jest.fn((handler) => { //sth
      }),
    },
  },
}));