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

为什么Cypress先报GET请求错误 后续请求又返回200状态码

问题原因排查与解决方案

Cypress默认仅会在测试用例的断言失败时判定测试不通过,页面自发触发的未被测试用例监听的HTTP请求错误,只会在运行日志中标红,不会阻断测试执行,这就是你看到GET报错但测试全量通过的根本原因。

具体诱因

  • 报错的GET请求为页面非核心请求:比如第三方统计、埋点、广告资源、非必要的静态资源请求,这类请求的失败不会影响登录功能的正常加载和操作,你当前的测试用例没有对该请求做状态断言,因此不会触发测试失败。
  • 选择器存在隐性语法问题:你提供的测试代码中所有cy.get()的属性选择器都缺失了闭合方括号,例如[data-cy=formulario应为[data-cy=formulario],当前能正常匹配元素是浏览器选择器的容错机制兜底,后续可能出现匹配失效的问题,建议优先修正。

不需要关注该报错请求的处理方案

如果确认该GET请求和登录测试逻辑无关,可以通过以下两种方式消除日志报错:

  1. 拦截该请求并mock返回值,在cy.visit('/login')前添加如下代码:
// 将xxx替换为你实际报错的GET请求路径匹配规则
cy.intercept('GET', 'xxx', {
  statusCode: 200
})
  1. 全局忽略非测试关联的请求错误,将以下代码添加到cypress/support/e2e.js文件中:
Cypress.on('fail', (error, runnable) => {
  // 可自定义错误匹配规则过滤不需要抛出的错误
  if (error.message.includes('GET request failed')) {
    return false
  }
  throw error
})

需要确保该请求正常的处理方案

如果该GET请求是登录流程的必要请求,添加监听和断言逻辑即可让测试在请求报错时正常触发失败:

// 在cy.visit前添加拦截
cy.intercept('GET', 'xxx').as('targetRequest')
// 操作完成后添加断言
cy.wait('@targetRequest').its('response.statusCode').should('eq', 200)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:27:02