允许 cy.wait 失败

Allow cy.wait to fail

在阅读了大量文档并尝试找到解决我的问题后,我没有找到任何东西,所以我们开始吧。

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

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

添加一个全局失败事件可以帮助我们,但也限制在这个测试失败时不执行额外的代码,我们强制它被标记为完成。

在测试定义中,我们可以像示例中一样添加 done 回调。

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.

现在,当这个特定错误被捕获时,我们的测试通过了,但任何其他错误都会导致测试错误。

cypress 不推荐这种解决方法,但除非 cypress 添加一个 catch 来管理一些错误,否则这是解决我的问题的唯一方法。