Cypress测试中如何等待跨域URL请求并解决拦截超时问题
拦截失败的核心原因
两个高频踩坑点:
cy.intercept注册时机不对:拦截监听必须在目标请求触发前完成注册。如果该GET请求是页面加载时自动发起的,拦截代码必须写在cy.visit()之前;如果是点击按钮等操作触发的,拦截代码必须写在触发操作的代码之前。请求发出后再注册拦截永远抓不到。- 路径匹配规则不对:你最初写的
/list-items和真实路径/api/list-items完全不匹配;直接写死跨域全地址的写法,在跨域请求场景下容易因为Cypress的域名匹配逻辑漏抓。
可直接生效的写法
用通配符匹配路径,同时调整代码执行顺序:
// 👇 这行必须放在所有会触发该请求的操作(cy.visit、点击按钮等)之前 cy.intercept('GET', '**/api/list-items').as('getListItems') // 之后再执行触发请求的操作,比如访问页面 cy.visit('https://ts-e2e-challenge.netlify.app/list') // 等待请求并校验响应 cy.wait('@getListItems').then((interception) => { // 示例校验逻辑,可根据需求替换 expect(interception.response.statusCode).to.eq(200) expect(interception.response.body).to.have.property('data') })
补充说明
**/api/list-items是通配符匹配规则,不限制域名和前缀路径,只要请求路径以/api/list-items结尾就能被捕获,跨域场景下比写死完整URL稳定性高很多。- 如果依然超时,打开Cypress运行器的命令日志面板,找到目标请求的实际发起时间,核对拦截代码的执行顺序是否在请求发起之前,90%以上的同类超时问题都是顺序写反导致的。
内容的提问来源于stack exchange,提问作者user9847788
相关产品推荐
相关产品推荐

