使用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
相关产品推荐
相关产品推荐

