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

使用TestCafe .request()发GET请求遇302重定向及fetch集成疑问

问题1:t.request()返回302的原因及解决方法

TestCafe的t.request()默认不自动跟随HTTP重定向(followRedirects参数默认值为false),而浏览器原生fetch()默认会自动跟随重定向,这就是两者表现差异的核心原因。你收到302响应后body为空,是因为重定向响应本身通常没有响应体,仅通过Location头指向跳转目标。

解决方法很简单,在t.request()的配置中添加followRedirects: true,让它自动跟随重定向即可拿到最终响应数据。修改后的代码如下:

const response = await t.request({
  url:'https://mailsac.com/api/addresses/sometestuser@mailsac.com/messages',
  method: 'GET',
  rawResponse: true,
  followRedirects: true, // 新增该参数开启自动重定向
  headers: {'Mailsac-Key': 'key-to-the-api'}
});
console.log(response.body.toString()); // 现在可获取正确的响应体内容

如果不需要原始响应格式,也可以去掉rawResponse: true,TestCafe会自动解析JSON响应,直接通过response.body就能拿到解析后的对象。

问题2:TestCafe中集成fetch并在后续步骤使用数据

完全可以在TestCafe测试流程中使用fetch(),但建议用async/await语法替代.then()链式调用,这样能将异步获取的数据存入变量,直接供后续测试步骤使用。示例代码如下:

test('提取magic link并用于后续操作', async t => {
  // 用await同步获取fetch结果
  const fetchResponse = await fetch('https://mailsac.com/api/addresses/sometestuser@mailsac.com/messages', {
    method: 'GET',
    headers: {'Mailsac-Key': 'key-to-the-api'}
  });
  const jsonData = await fetchResponse.json();
  const magicLink = jsonData[0].links[0];
  
  // 后续测试步骤直接使用magicLink变量
  console.log(magicLink);
  await t.click(magicLink); // 示例:点击页面上的magic link,可根据实际场景调整
});

这种写法完全适配TestCafe的异步测试模型,所有步骤会按顺序执行,无需担心异步回调的作用域问题。

关于你提到的proxyless模式:该模式主要影响TestCafe对浏览器请求的拦截与代理,和你遇到的t.request()重定向、fetch()使用问题无直接关联,无需调整模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:42:22