如何在Cypress中仅等待请求发出而非完成响应?
仅等待请求发出而非响应的Cypress实现方案
要实现只等待请求发出而不用等响应,你可以利用Cypress的cy.intercept()监听请求发出的事件,而不是默认的响应完成事件。这里有几种实用的写法:
方法1:使用Spy监听请求发出
// 创建一个spy并设置别名 const requestSentSpy = cy.spy().as('requestSent'); cy.intercept(url, (req) => { // 请求发出时触发spy requestSentSpy(); // 让请求继续发送,不阻断后续流程 req.continue(); }); cy.get('button').click(); // 等待spy被调用,确认请求已发出 cy.wait('@requestSent');
方法2:通过onRequest事件设置可等待别名
cy.intercept(url).on('request', () => { // 请求发出时创建标记别名 cy.wrap(true).as('requestSent'); }); cy.get('button').click(); // 等待别名被创建,即请求已发出 cy.wait('@requestSent');
方法3:直接拦截请求阶段(可选模拟响应)
如果你不需要等待真实响应,也可以直接在请求阶段完成拦截:
cy.intercept(url, (req) => { // 可添加请求相关断言 expect(req.method).to.equal('GET'); // 可选:模拟响应让请求快速结束,也可以删除该行让请求继续发送 req.reply({ statusCode: 200 }); }).as('alias'); cy.get('button').click(); // 此wait会在请求发出后立即结束,无需等待真实响应 cy.wait('@alias');
原理说明
默认的cy.wait('@alias')会等待请求的响应阶段完成,而上述方法都是监听请求发出的瞬间,因此能提前结束等待流程。
内容的提问来源于stack exchange,提问作者Yogendiran Barath
相关产品推荐
相关产品推荐

