允许cy.wait失败

时间:2019-12-04 08:16:08

标签: cypress end-to-end

在阅读了大量文档并尝试找到解决问题的方法后,我什么都没找到,所以我们开始吧。

我在测试端到端流程时遇到以下问题,我正在测试的流程确实会连续启动请求,但在一种情况下,我希望这些请求会停止。换句话说,如果要发出请求,我想抛出一个错误,并且在没有任何请求的情况下达到超时时,错误将继续。

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,但我也遇到同样的问题。

1 个答案:

答案 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.

现在,当捕获到此特定错误时,我们的测试通过了,但是其他任何错误都将导致测试错误。

赛普拉斯不建议采用这种解决方法,但是除非赛普拉斯添加了一个陷阱来管理某些错误,否则这是解决问题的唯一方法。