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

RTK Query与fetch-mock-jest兼容问题:无法识别Request对象

解决fetch-mock-jest兼容RTK Query与普通fetch的配置方案

问题原因

RTK Query内部生成的Request实例,其构造器与fetch-mock默认识别的构造器不匹配(RTK Query底层依赖cross-fetch做跨环境兼容),导致fetch-mock无法识别请求,抛出"Unrecognised Request object"错误。

配置步骤(在setupTests.js中完成)

1. 配置fetch-mock识别RTK Query的Request构造器

如果项目未安装相关依赖,先执行安装:

npm install --save-dev cross-fetch fetch-mock-jest

在setupTests.js中添加以下配置代码:

import fetchMock from 'fetch-mock-jest';
import { Request } from 'cross-fetch';

// 让fetch-mock识别RTK Query使用的Request构造器
fetchMock.config.Request = Request;
// 同时兼容全局fetch发起的普通请求
fetchMock.config.fetch = global.fetch;

2. 测试用例中的常规使用

配置完成后,可正常使用fetch-mock的语法匹配所有请求,不管是RTK Query钩子发起的还是普通fetch调用的:

// 匹配RTK Query的GET请求
fetchMock.get('/api/user-data', { data: { name: 'test' } });

// 匹配普通fetch的POST请求
fetchMock.post('/api/upload', { status: 201, body: { id: 123 } });

3. 处理文档下载类请求

对于普通fetch的文档下载场景,可模拟返回Blob类型数据:

fetchMock.get('/api/download-report', () => 
  new Blob(['sample report content'], { type: 'application/vnd.ms-excel' })
);

关键说明

  • RTK Query默认依赖cross-fetch实现跨环境fetch,必须将其Request构造器注册给fetch-mock,才能识别RTK Query生成的请求实例。
  • 配置fetchMock.config.fetch = global.fetch是为了兼容直接调用全局fetch的普通请求,确保两种请求都能被正确拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:37:18