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

Cypress如何拦截同URL的API请求并断言轮询最终返回200状态码

Cypress 轮询同URL断言最终返回200状态码方案

下面直接给两种可直接使用的实现方式:


方案1:递归等待单条请求

适合对轮询次数有明确预估的场景,可自定义重试次数和单请求超时时间:

// 1. 注册拦截器,捕获所有对目标URL的请求,替换为你实际的请求方法
cy.intercept('GET', 'http://example.com/search').as('searchPoll')

// 2. 触发轮询的业务操作,比如点击搜索、提交表单等,替换为你实际的操作代码
cy.get('#submit-search').click()

// 3. 递归等待轮询结果,10为最大重试次数,可根据实际场景调整
function waitForSuccess(retry = 10) {
  if (retry < 1) throw new Error('轮询超时,未收到200响应')
  cy.wait('@searchPoll', {timeout: 10000}).then((res) => {
    if (res.response.statusCode === 200) {
      expect(res.response.statusCode).to.eq(200)
      return
    }
    waitForSuccess(retry - 1)
  })
}
waitForSuccess()

方案2:利用内置重试批量检查所有请求

写法更简洁,依赖Cypress命令自带的自动重试特性,无需手动写递归:

// 1. 注册拦截器,替换为你实际的请求方法
cy.intercept('GET', 'http://example.com/search').as('searchPoll')

// 2. 触发轮询的业务操作
cy.get('#submit-search').click()

// 3. 持续检查所有已捕获的请求,直到存在200响应或超时,30000为总超时时间(单位ms)
cy.get('@searchPoll.all', {timeout: 30000})
  .should((interceptList) => {
    const hasSuccessRes = interceptList.some(item => item.response?.statusCode === 200)
    expect(hasSuccessRes).to.be.true
  })

注意事项

  • 两种方案里的请求方法、超时时间、触发轮询的操作都需要根据你的实际业务场景调整
  • 如果需要同时验证200响应的返回内容,在should的判断逻辑里追加对应断言即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:54:02