Cypress 上的 .should('exist') 断言是多余的吗?

ITg*_*guy 16 automated-tests assertion cypress

让我们考虑一下我需要断言元素是否存在的情况。在 cypress 中有两种可能的方法来做到这一点:

1) cy.get('button').contains('Save')
2) cy.get('button').contains('Save').should('exist')
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,如果“保存”按钮不存在,测试都会失败。

除了可能更好的代码可读性/可维护性之外,我应该将.should('exist') 添加到我的 cypress 测试中的原因是什么?

Dur*_*tko 15

对于断言元素是否存在的用例,它们确实是多余的。

.contains()产生一个 DOM 元素,根据文档.should产生与作为输入给出的相同元素。当 .should 产生不同的元素时有一些例外(如您在文档中所见)但在使用的情况下should('exist'),它们确实是多余的

正如你提到的,我个人也更喜欢添加should以获得更好的可读性。实际上我更喜欢.should('be.visible')因为以下场景 - 当一个元素由于某些 CSS 问题而被隐藏或被推出屏幕时,从用户的角度来看它不存在。但..

cy.get('button').contains('Save') - 通过测试

cy.get('button').contains('Save').should('exist') - 通过测试

cy.get('button').contains('Save').should('be.visible') - 测试失败