You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jest模拟Axios调用始终进入catch分支问题求助

问题分析与修复方案

1. 模拟数据存在语法错误

你的mockedResponseDate定义有两处语法问题,直接导致数据格式无效:

  • 字段'number: 7引号未闭合,且后端返回的字段是num而非number
  • 对象和数组的闭合括号缺失

修复后的模拟数据:

const mockedResponseData = {
  numbers: [ { id: 0, user_id: 1, num: 7, reason: 'test reason' } ]
};

2. Axios Mock未返回Promise

Axios请求方法本身返回Promise,但你的mock直接返回了普通对象,导致组件中.then()无法正常执行,最终进入catch分支。需要让mock返回一个resolved状态的Promise。

修复后的mock逻辑:

const mockResponse = config => {
  const { method, url } = config;
  if (url === '/user/fav_numbers') {
    // 返回resolved状态的Promise,模拟接口成功响应
    return Promise.resolve({
      status: 200,
      data: mockedResponseData,
    });
  }
  // 对其他请求返回默认错误
  return Promise.reject(new Error('Unknown request'));
};

jest.mock('packs/axios', () => jest.fn(config => mockResponse(config)));

3. 测试逻辑补充(可选)

可以在测试中添加断言,验证数据是否正确渲染:

test('Display initial numbers from db', async () => {
  render(<favNumbers userId={1}/>);

  await waitFor(() => {
    // 断言页面渲染了模拟的数字7
    expect(screen.getByText('7')).toBeInTheDocument();
    // 断言错误提示未出现
    expect(screen.queryByTestId('error-message')).not.toBeInTheDocument();
  });
});

额外检查点

  • 确认组件中导入axios的路径和mock的'packs/axios'完全一致,路径不匹配会导致mock失效,触发真实的XMLHttpRequest请求
  • 组件内请求URL/user/fav_numbers与mock判断条件一致,这部分无需调整

内容的提问来源于stack exchange,提问作者SlugLord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 13:18:21