这看起来非常基础,我不好意思问 Stack Overflow,但我发誓我先尝试过谷歌搜索并查看 Cypress 文档!
简单的问题:Cypress 有断言 ( cy.should
) 和一种暂停测试运行程序的方法 ( cy.pause
) ...有什么方法可以连接这两者,这样如果 ashould
失败,测试运行程序就会暂停?
我知道我能做到:
cy.should(whatever)
.pause();
...但每次都会暂停。我只想在失败时暂停should
。
PS 你可能会想:
try {
cy.should(whatever)
} catch (err) {
cy.pause();
}
会起作用...但事实并非如此,因为(就像赛普拉斯中的所有内容一样)实际抛出的错误不会在线上发生should
...它会在稍后发生(当它无法被捕获时)。
同样,我尝试这样做:
cy.on('uncaught:exception', () => {
cy.pause();
});
cy.should(whatever);
但它不起作用,大概是因为当使用 捕获错误时cy.on
,已经来不及暂停了。
你的回答失败了
但如果你只是
.then()
按照should()
消息提示进行交换它也会失败,因为
expect()
它是同步的,cy.pause()
也是异步的 -.then()
在新排队的暂停命令可以运行之前运行完成。使用 else 分支
但请注意,使用这种模式你会失去重试的机会。
我发现你可以使用回调形式
should
来解决这个问题。代替:执行以下操作(更详细):