Cypress 的负面断言

问题描述 投票:0回答:1

在 Cypress 中,如果我有一个触发异步操作的按钮(如

fetch
),并且我想验证单击此按钮是否最终触发错误,这是否足够?

cy.findByTestId('the-button').click();
cy.findByTestId('error-msg').should('not.exist');

我怀疑不是。我想我需要使用

cy.wait
,通常带有路线,如下所示:

cy.intercept('POST', '/endpoint').as('endpoint');
cy.findByTestId('the-button').click();
cy.wait('@endpoint');
cy.findByTestId('error-msg').should('not.exist');

但这保证有效吗?如果端点响应,

should('not.exist')
测试通过,然后 - 因为页面需要一些时间来更新以回复端点的响应 - 发生错误怎么办?

这里有一些可以遵循的最佳实践吗?

后续问题:可以公平地说,积极和消极的主张之间存在严重的不对称吗?如果我理解正确的话,Cypress 会重试断言,直到它们通过。因此,有效地,

should
断言检查该断言在未来某个时间点是否为真。但是对于否定断言,我们经常想要检查的是该断言在“每个”未来时间点都是正确的。这让我认为负面的断言很容易产生误导。

超时会等待满足断言所需的时间。如果该元素最初存在,
cypress
1个回答
0
投票
将等待它消失。

因此,如果应用程序允许,请强制错误发生(在测试的安排部分期间),然后采取使其消失的操作(测试的行动部分)并断言它不存在。

对于使用

cy.wait('@endpoint')
进行等待,请记住 Javascript 是

单线程

,因此由 
cy.get('the-button').click() 引起的操作应在 cy.wait('@endpoint')
 执行之前完成。
如有疑问,进行燃烧测试 -

使用 cypress-grep 进行燃烧测试

npx cypress run --spec my-spec.js --env grep="burn=10"


© www.soinside.com 2019 - 2024. All rights reserved.