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

如何使用fetch-mock模拟准确服务器错误并获取完整错误对象

问题根因

直接在fetchMock的响应回调中抛出普通对象时,fetch-mock内部会对抛出值执行默认的toString转换,最终就会得到[object Object]的无意义字符串。

解决方案

你可以根据你的模拟场景选择以下两种方案:

方案1:模拟网络级错误(直接触发catch回调)

如果要模拟断网、跨域等会直接导致fetch返回rejected状态的场景,不要直接throw对象,而是返回一个rejected的Promise,即可完整保留错误对象结构:

// 修改后的fetchMock配置
fetchMock.get('glob:https://*/server-api-uri', () => {
  return Promise.reject({ example: 'error' })
})

修改后业务代码无需调整,catch中即可直接拿到完整错误对象:

exampleServerCall().catch(error => {
  console.log(error) // 输出 {example: 'error'}
})

方案2:模拟HTTP接口错误(更贴近真实线上行为)

真实场景中,接口返回4xx、5xx状态码时,fetch默认不会触发catch,仅会将响应的ok属性设为false。这种更贴近真实业务的模拟方案如下:

// 修改后的fetchMock配置,可自定义状态码和返回体
fetchMock.get('glob:https://*/server-api-uri', {
  status: 500,
  body: { example: 'error' }
})

业务代码需要先判断响应状态,再手动抛出错误:

exampleServerCall()
  .then(async response => {
    if (!response.ok) {
      // 解析接口返回的错误内容后抛出
      const error = await response.json()
      throw error
    }
    // 正常处理成功响应逻辑
  })
  .catch(error => {
    console.log(error) // 输出 {example: 'error'}
  })

如果你使用的是axios等二次封装的请求库,库本身会对非2xx的状态码自动抛出错误,使用方案2的配置即可直接在catch中拿到错误内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:36:02