You need to enable JavaScript to run this app. ReactJS测试场景下如何mock本地XML文件的fetch请求?
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS测试场景下如何mock本地XML文件的fetch请求?

问题原因
  • 响应格式不符合组件处理逻辑
    你的组件拿到fetch响应后,会先调用.text()获取文本内容,再交给XMLParser解析为XML结构,最后经过XMLMapper转换为可用的业务对象。但你当前的MSW handler用ctx.json(data.units)返回JSON格式数据,XMLParser解析JSON字符串会直接报错,逻辑进入catch分支,没有给municipalityData赋值,所以列表没有渲染,自然找不到对应testid的元素。
  • 可能存在请求路径不匹配的问题
    你需要确认测试环境下XMLFile变量解析出的完整请求路径,和MSW handler中填写的路径完全一致。如果路径不匹配,MSW就不会拦截对应请求,自然返回不到预期数据。
修复方案
  1. 调整MSW的handler,返回和实际本地XML文件结构一致的XML文本,示例如下:
const server = setupServer(
  rest.get("http://localhost/data.xml", (req, res, ctx) => {
    // 替换为和你实际XML结构一致的字符串,保证XMLMapper可以正常解析出units数组
    const mockXml = `
      <root>
        <unit>
          <BookingURL>https://someurl1.com</BookingURL>
        </unit>
        <unit>
          <BookingURL>https://someurl2.com</BookingURL>
        </unit>
      </root>
    `
    return res(ctx.body(mockXml))
  })
)
  1. 确认请求路径完全匹配:如果MSW仍然提示无匹配的请求handler,直接把警告中打印的完整GET路径替换到rest.get的第一个参数即可。
  2. (可选)如果单测不需要验证XML解析逻辑,也可以直接mock XMLParser、XMLMapper这两个方法的返回值,跳过XML解析流程直接返回构造好的业务数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 15:12:01