我们的应用程序中有一张表:
如果表格长度大于 5,则显示分页,如果长度小于 5,则不显示
Cypress 认为在 Cypress 测试中使用条件不是一个好的做法。
处理这种情况的最佳做法是什么?
如果我编写一个分页测试用例,那么当它没有足够的数据并且不在表格上显示分页时。那么带有分页的表就会失败。
当我们有足够的数据并且它显示分页时,没有分页的测试就会失败。
我详细研究了有关条件测试的赛普拉斯文档,但没有在这里找到解决方案:https://docs.cypress.io/guides/core-concepts/conditional-testing#What-youll-learn
我详细研究了赛普拉斯有关条件测试的文档,但没有找到解决方案。
我尝试在
should()
和 then()
中传递回调以实现链接目的,但仍然不走运。
我建议使用一种策略,使您的测试不需要“条件”检查。我认为最简单的解决方案是使用
cy.intercept()
来存根您的网络请求并强制您的测试具有(或不具有)分页。
describe('tests', () => {
it('tests pagination', () => {
cy.intercept('/my-url', { fixture: 'pagination.json' });
cy.visit('/my-website');
// my tests for pagination
});
it('tests no pagination', () => {
cy.intercept('/my-url', { fixture: 'no-pagination.json' });
cy.visit('/my-website');
// my tests for no pagination
});
});
上面的示例在两种情况下设置截距,使用
fixture
选项填充存根。有许多替代方法可以实现此目的,所有这些都在 cy.intercept()
文档中突出显示。
我为什么要存根?
您的测试正在验证给定某些条件(具体来说,当有一定数量的数据时),您将获得分页选项(或相反)。就是这样 - 测试不是测试后面的数据结束是否正确,或与测试相关的任何其他因素。因此,排除所有您无法控制的因素(在本例中为 API 响应),以便您的测试完全在您的控制范围内。
但这不会给我留下覆盖范围的空白吗?如果 API 发生变化或出现故障怎么办?
它确实给您留下了覆盖范围的空白。但是,通过依赖在这些测试中的数据响应,你会让自己感到沮丧。您应该进行专门针对这些其他差距的测试,以便确保满足这些特定条件。这些测试呢?他们只是在研究分页 UI 的工作原理 - 如果我有 X 个响应,我可以获得正确的分页 UI 吗?