Cypress测试以Cypress.Promise开头时失败却显示通过的问题求助
Cypress测试用例以Cypress.Promise开头时,执行失败却显示通过的问题解决
问题原因
- Cypress仅跟踪自身的命令队列(所有
cy.开头的命令),当测试用例最外层直接使用Cypress.Promise时,这个Promise不属于Cypress的命令队列范畴。Cypress会在执行完Promise的初始化逻辑后,就判定测试用例执行完成并标记为通过,而then回调里的cy.get('x')执行失败的错误,会在测试状态已经被标记后才抛出,因此无法被Cypress捕获。 - 第二个示例中,
cy.request是Cypress原生命令,Cypress会等待该命令执行完成后再进入后续的then回调,此时回调内的所有代码(包括Cypress.Promise和cy.get)都会被Cypress跟踪,所以cy.get执行失败时能正确标记测试用例为失败。
解决方案
有两种可靠的修复方式:
- 沿用你第二个示例的写法,将
Cypress.Promise放入Cypress命令的回调中,确保Cypress能跟踪后续命令的执行流程。 - 使用
cy.wrap()包裹Cypress.Promise,将其纳入Cypress的命令队列,让Cypress等待整个Promise链执行完毕:
it('waiting for answer', () => { cy.wrap(new Cypress.Promise((resolve) => { resolve('ok') })).then((question) => { cy.get('x') }) })
内容的提问来源于stack exchange,提问作者huseyin tumer
相关产品推荐
相关产品推荐

