如何在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
相关产品推荐
相关产品推荐

