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

Cypress中POST请求未被拦截问题求助

无法拦截登录请求的原因及解决方案

核心原因:cy.intercept不支持拦截cy.request发起的请求

Cypress的cy.intercept仅能捕获浏览器层面发出的XHR/fetch请求,而cy.request是直接从Node.js层发送的HTTP请求,完全绕过浏览器网络栈,所以你的拦截配置对cy.request完全无效,这是导致请求未被拦截的根本原因。

其他潜在问题

  • URL不一致:你的cy.request中URL拼接后带有空格:Cypress.env("authBaseUrlApi") + "sign-in "(注意sign-in末尾的空格),而拦截的目标URL是https://auth.website.dev/v2/sign-in,即使拦截能生效,这种URL不匹配也会导致拦截失败。
  • 拦截注册时机:虽然不是核心问题,但cy.intercept建议在请求发起前提前注册(比如beforeEach最开始),你在发起请求前的setHeaderQA中才注册拦截,虽然Cypress命令队列会保证顺序,但提前注册更稳妥。

修复方案

既然cy.intercept管不到cy.request,直接在cy.request中手动设置请求头即可,无需使用拦截:

修改getSessionCookie命令,把请求头直接加到cy.request的配置里:

Cypress.Commands.add('getSessionCookie', (emailAddress: string, password: string) => {
  const { headerKey, headerValue } = Cypress.env(); // 直接获取header配置
  cy.task('createAndAccessSecret', Cypress.env('version')).then((cfToken) => {
    cy.request({
      method: 'POST',
      url: Cypress.env("authBaseUrlApi") + "sign-in", // 去掉末尾的空格
      body: {
        email: emailAddress,
        password: password,
        cf_token: cfToken
      },
      headers: {
        [headerKey]: headerValue // 直接设置请求头
      }
    }).then((response) => {
      return response.headers['set-cookie'];
    })
  })
})

同时可以删除setHeaderQA命令,因为已经不需要它通过拦截设置header了。另外务必修正URL中的空格问题,确保请求URL和后端接口完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:27:07