You need to enable JavaScript to run this app. 使用Cypress的cy.intercept()时如何只获取最后一次拦截的API请求
优惠活动
大模型
产品
解决方案
定价
更多

使用Cypress的cy.intercept()时如何只获取最后一次拦截的API请求

Cypress拦截重复请求仅获取最后一次拦截结果的实现方案

方案1:固定触发2次场景,连续等待两次

如果确认该GET /ticket接口固定会触发两次,直接连续调用两次cy.wait()即可,第二次拿到的就是最后一次的拦截数据:

// 忽略第一次拦截结果
cy.wait('@assignedTicketAPI')
// 第二次等待获取最后一次的请求、响应数据
cy.wait('@assignedTicketAPI').then(interception => {
  // interception包含完整的请求头、请求体、响应头、响应体等信息
  console.log('最后一次返回的响应内容:', interception.response.body)
})

方案2:不固定触发次数场景,取所有拦截记录的最后一项

Cypress 7.0及以上版本支持通过@别名.all获取所有匹配该拦截规则的拦截记录数组,直接取数组最后一位即可,不需要提前知道请求触发次数:

// 先确保所有接口请求都已经触发完成,可根据业务场景增加前置操作确保请求都已发出
cy.get('@assignedTicketAPI.all').then(interceptions => {
  // 取数组最后一项即为最后一次的拦截结果
  const lastInterception = interceptions.at(-1)
  console.log('最后一次返回的响应内容:', lastInterception.response.body)
})

注:低版本Cypress不支持.all语法,可使用下面的方案3实现

方案3:拦截时实时存储最新结果,随时可调用

如果需要在任意节点直接获取当前最新的拦截结果,可以在拦截回调中实时更新存储的最新值:

// 声明变量存储最新的拦截结果,也可以存入Cypress.env全局对象中
let latestAssignedTicket
cy.intercept({
    url: `${Cypress.config().apiUrl}/ticket`,
    method: 'GET',
}, (req) => {
  req.continue((res) => {
    // 每次接口返回后更新为最新的结果
    latestAssignedTicket = res.body
  })
}).as('assignedTicketAPI')

// 后续任意需要使用结果的位置直接调用变量即可
cy.then(() => {
  console.log('最新的接口返回内容:', latestAssignedTicket)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 03:30:01