van*_*ert 9 javascript cypress
当前,当it()块中的单个测试失败时,Cypress 会完全停止。
我希望赛普拉斯继续运行后续测试,无论之前的测试是否失败(但我仍然想标记失败的测试,以便我知道哪个失败了)。
我试图拦截失败事件beforeEach:
beforeEach(() => {
Cypress.on('fail', (error, runnable) => {
cy.log('this single test failed, but continue other tests');
// don't stop!
// throw error; // marks test as failed but also makes Cypress stop
});
Run Code Online (Sandbox Code Playgroud)
但看起来我不能cy在这个处理程序中使用任何命令,因为当我这样做时,由于赛普拉斯奇怪的内部承诺逻辑,它会返回一个错误:
CypressError:赛普拉斯检测到您从命令返回了一个承诺,同时还调用了该承诺中的一个或多个 cy 命令。
返回承诺的命令是:
cy.wait()
您在承诺中调用的 cy 命令是:
cy.log()
因为 Cypress 命令已经类似于 promise,所以您不需要包装它们或返回您自己的 promise。
无论最终 Cypress 命令产生什么结果,Cypress 都会解析您的命令。
这是一个错误而不是警告的原因是因为 Cypress 在内部按顺序排列命令,而 Promises 会在调用后立即执行。试图调和这会阻止赛普拉斯解决问题。
https://on.cypress.io/returning-promise-and-commands-in-another-command
如果我将Cypress.on('fail')块留空,即使它们失败,所有测试也会被标记为通过。
如果我取消注释throw errorCypress 将在任何失败的测试中完全停止。
如果您throw error在测试中,它将以与代码出现问题时相同的方式停止脚本。这是按预期运行的。您可能需要重新审视您的测试逻辑,并考虑添加一些不会将退出代码设置为 1 的存根/间谍。
缺少此功能(请参阅此问题:https://github.com/cypress-io/cypress/issues/518)。如果您通读它,您会发现一些代码片段提到抛出错误以停止测试运行器。你这样做的目的是相反的。
如果您必须抛出错误并且没有测试运行程序保释,则需要捕获它。
| 归档时间: |
|
| 查看次数: |
8478 次 |
| 最近记录: |