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

如何在Cypress中验证某一个API调用已执行?

验证两个API调用中任意一个已触发的方法

这里提供两种实用的实现方式:

方式一:使用Promise.race()等待首个触发的请求

利用Promise.race()的特性——它会在传入的Promise数组中第一个完成的Promise返回时结束,刚好匹配“等待任意一个API调用触发”的需求:

cy.intercept('GET', '/api/v1/url1').as('call1');
cy.intercept('PUT', '/api/v1/url2').as('call2');

cy.get('[data-cy-name="submit"]').click();

// 等待任意一个请求完成,并返回触发的请求标识
cy.wrap(Promise.race([
  cy.wait('@call1').then(() => 'call1 已触发'),
  cy.wait('@call2').then(() => 'call2 已触发')
])).then((triggered) => {
  cy.log(triggered); // 可选:打印触发的请求
});

方式二:通过拦截回调标记触发状态

在每个API拦截的回调中设置标记,后续断言标记值为两个请求中的任意一个,以此验证至少有一个请求被触发:

let triggeredApi;

// 拦截请求时设置触发标记
cy.intercept('GET', '/api/v1/url1', (req) => {
  triggeredApi = 'call1';
  req.continue(); // 确保请求正常转发
}).as('call1');

cy.intercept('PUT', '/api/v1/url2', (req) => {
  triggeredApi = 'call2';
  req.continue();
}).as('call2');

cy.get('[data-cy-name="submit"]').click();

// 断言标记已被设置为两个请求中的一个
cy.wrap(null).should(() => {
  expect(triggeredApi).to.be.oneOf(['call1', 'call2']);
});

// 可选:如果需要验证具体是某个请求触发,可添加如下断言
// cy.wrap(triggeredApi).should('eq', 'call1');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:23:14