我要测试的是,当我单击关闭模式对话框(ng材质)的按钮时,该模式不存在。
该测试实际上关闭了模态,但它通过了
it('should close the modal when the close button is clicked', () => {
cy.get('#close-new-category').click();
cy.get('#new-category').should('exist');
});
此测试也可以
it('should close the modal when the close button is clicked', () => {
cy.get('#close-new-category').click();
cy.get('#new-category').should('not.exist');
});
如果我添加等待,该测试将失败
it('should close the modal when the close button is clicked', () => {
cy.get('#close-new-category').click();
cy.wait(500);
cy.get('#new-category').should('exist');
});
此测试通过了预期的结果,但是使用wait()是最好的方法吗?
it('should close the modal when the close button is clicked', () => {
cy.get('#close-new-category').click();
cy.wait(500);
cy.get('#new-category').should('not.exist');
});
我只问是因为文档说这是反模式,应该有更好的方法。
答案 0 :(得分:4)
出于这些测试的目的,您无需使用wait()。我认为这些示例就像单元测试一样测试过多,而像端到端测试则不够。
#1案例通过的原因是,单击关闭后,模态仍然存在少量时间。在这种情况下,should()会立即检查并仍然看到您的模态,因此它会继续前进。
案例2也通过了,因为should()已内置重试逻辑,这是赛普拉斯的主要功能之一。单击关闭后,should()会立即检查并发现模态确实存在。因为找到了模态,它将等待并重试。最终,该模态确实消失了,并且该should()通过了。
就您的测试场景而言,您只需要关心案例2,因为它测试了您的模态确实消失了。经过should()通过之后,您就可以知道模态已经消失,可以继续进行测试的下一步。最初它仍然存在的事实与您接下来要完成的任务无关。