在阅读了大量文档并尝试找到解决问题的方法后,我什么都没找到,所以我们开始吧。
我在测试端到端流程时遇到以下问题,我正在测试的流程确实会连续启动请求,但在一种情况下,我希望这些请求会停止。换句话说,如果要发出请求,我想抛出一个错误,并且在没有任何请求的情况下达到超时时,错误将继续。
cy.wait('@my-request', { timeout: 20000 })
如果应用正常运行,我希望这会超时,所以我尝试这样做。
cy.wait('@my-request', { timeout: 20000 })
.its('status').should('not.eq', 404)
.its('status').should('not.eq', 200);
我希望执行链接的任务,但这仅在发出请求时发生,并且尝试使用.then
,但我也遇到同样的问题。
答案 0 :(得分:0)
添加一个全局失败事件可以帮助我们,但也限制了该测试失败时不执行其他代码,并且我们将其标记为完成。
在测试定义中,我们可以像示例中一样添加完成的回调。
it('Description', (done) => {
// other test stuff
cy.on('fail', (err) => {
if (err.name === 'CypressError' && err.message.includes('routeAlias') && err.message.includes('Timed out')) {
done();
return true;
}
throw err;
});
cy.wait('@routeAlias', { timeout: 20000 })
.then(() => {
throw new Error('Error request found.');
});
});
// Any remaining code won't be executed if you need to reset something you need to create a new step, like in my case I did a new step to click a cancel button and prepare the app for the next test.
现在,当捕获到此特定错误时,我们的测试通过了,但是其他任何错误都将导致测试错误。
赛普拉斯不建议采用这种解决方法,但是除非赛普拉斯添加了一个陷阱来管理某些错误,否则这是解决问题的唯一方法。