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

旧版MSW(0.36.7)如何让同一请求返回不同响应体?

解决方案:在MSW 0.36.7中让同一请求返回不同响应

在MSW 0.36.7版本中,你可以通过以下两种方式实现同一请求多次返回不同响应,无需重置服务器或重新定义请求处理器:

方案1:根据请求的图片ID返回对应URL

你的API请求包含:id参数,直接根据这个ID映射对应的图片URL是最贴合场景的方式:

// 定义图片ID与URL的映射关系
const imageUrlMap = {
  '1': 'some_image_id_1',
  '2': 'some_image_id_2',
  '3': 'some_image_id_3'
  // 可根据测试需求添加更多映射
};

server.use(
  rest.get(/api/images/:id/, (req, res, ctx) => {
    const imageId = req.params.id;
    // 根据ID获取对应的URL,若不存在可返回默认值或错误
    const imageUrl = imageUrlMap[imageId] || 'default_image_id';
    
    return res(
      ctx.status(HttpStatusCode.Ok),
      ctx.body(JSON.stringify({ url: imageUrl }))
    );
  })
);

这样当组件请求/api/images/1时返回some_image_id_1,请求/api/images/2时返回some_image_id_2,完全匹配你的多图片加载测试场景。

方案2:按请求顺序依次返回不同响应

如果不需要根据ID区分,只是需要按调用顺序返回不同响应,可以维护一个计数器或预定义的响应列表:

// 预定义要返回的URL列表
const imageUrls = [
  'some_image_id_1',
  'some_image_id_2',
  'some_image_id_3'
];
// 初始化请求计数器
let requestCount = 0;

server.use(
  rest.get(/api/images/:id/, (req, res, ctx) => {
    // 获取当前请求对应的URL,超出列表长度时可循环或返回默认值
    const currentUrl = imageUrls[requestCount] || 'default_image_id';
    // 计数器自增,准备下一次请求
    requestCount++;
    
    return res(
      ctx.status(HttpStatusCode.Ok),
      ctx.body(JSON.stringify({ url: currentUrl }))
    );
  })
);

这种方式下,第一次调用API返回列表第一个URL,第二次返回第二个,以此类推,适合不依赖ID的测试场景。

两种方案都可以在同一个测试用例中多次调用API,无需修改或重置服务器配置,完全满足你的测试需求。

内容的提问来源于stack exchange,提问作者Romain Gonçalvès

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:27:09