为什么Cypress先报GET请求错误 后续请求又返回200状态码
问题原因排查与解决方案
Cypress默认仅会在测试用例的断言失败时判定测试不通过,页面自发触发的未被测试用例监听的HTTP请求错误,只会在运行日志中标红,不会阻断测试执行,这就是你看到GET报错但测试全量通过的根本原因。
具体诱因
- 报错的GET请求为页面非核心请求:比如第三方统计、埋点、广告资源、非必要的静态资源请求,这类请求的失败不会影响登录功能的正常加载和操作,你当前的测试用例没有对该请求做状态断言,因此不会触发测试失败。
- 选择器存在隐性语法问题:你提供的测试代码中所有
cy.get()的属性选择器都缺失了闭合方括号,例如[data-cy=formulario应为[data-cy=formulario],当前能正常匹配元素是浏览器选择器的容错机制兜底,后续可能出现匹配失效的问题,建议优先修正。
不需要关注该报错请求的处理方案
如果确认该GET请求和登录测试逻辑无关,可以通过以下两种方式消除日志报错:
- 拦截该请求并mock返回值,在
cy.visit('/login')前添加如下代码:
// 将xxx替换为你实际报错的GET请求路径匹配规则 cy.intercept('GET', 'xxx', { statusCode: 200 })
- 全局忽略非测试关联的请求错误,将以下代码添加到
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
相关产品推荐
相关产品推荐

