我应该使用wait()等待对话框关闭吗?有更好的方法吗?

时间:2018-07-11 23:36:42

标签: cypress

我要测试的是,当我单击关闭模式对话框(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');
});

我只问是因为文档说这是反模式,应该有更好的方法。

1 个答案:

答案 0 :(得分:4)

出于这些测试的目的,您无需使用wait()。我认为这些示例就像单元测试一样测试过多,而像端到端测试则不够。

#1案例通过的原因是,单击关闭后,模态仍然存在少量时间。在这种情况下,should()会立即检查并仍然看到您的模态,因此它会继续前进。

案例2也通过了,因为should()已内置重试逻辑,这是赛普拉斯的主要功能之一。单击关闭后,should()会立即检查并发现模态确实存在。因为找到了模态,它将等待并重试。最终,该模态确实消失了,并且该should()通过了。

就您的测试场景而言,您只需要关心案例2,因为它测试了您的模态确实消失了。经过should()通过之后,您就可以知道模态已经消失,可以继续进行测试的下一步。最初它仍然存在的事实与您接下来要完成的任务无关。