我有一个Cypress测试,由于被测试的东西的串行和严重异步性质,它是脆弱的。
在应用程序中,我们有一个包含锻炼列表的锻炼卡。每个练习都有一个集合列表。如果所有的集合都记录了,那么锻炼也应该显示为记录了。
因此,测试必须连续展开每个锻炼,记录每个集合(必须更新锻炼,获取更新的健身计划,并为日志图标呈现新样式),然后测试新样式是否已应用。这是不可靠的,因为经常有分离的元素,并且在某些情况下,日志样式将花费太长时间来应用(或者响应很慢),所以我开始实现cypress-wait-until
包。问题是,无论我如何尝试构建waitUntil,即使评估的值为真,它也会重试一堆时间,然后超时'超时重试'错误。
下面是问题代码:
cy.getBySel('exerciseRow')
.each(row => {
cy.wrap(row)
.findBySel('exerciseRow-trigger')
.isAttached()
.click({ force: true });
cy.wrap(row)
.isAttached()
.findBySel('exerciseRow-trigger')
.parent()
.should('have.class', 'is-open')
.then($el => {
cy.wrap(row)
.isAttached()
.findBySel('setRow-log')
.each(setLog => {
cy.wrap(setLog)
.isAttached()
.click({ force: true })
.then(log => {
cy.waitUntil(() => {
cy.wrap(log)
.find('circle')
.then(circle => circle.css("stroke") === 'rgb(189, 249, 234)')
}, {interval: 1000, timeout: 15000})
});
});
});
})
.then(result => {
cy.getBySel('workout-card-log')
.find('circle')
.should('have.css', 'stroke', 'rgb(189, 249, 234)');
});
});
普通的.should()
应该同样有效
.then(log => {
cy.wrap(log)
.find('circle', {timeout: 15000})
.should(circle => {
expect(circle.css("stroke")).to.eq('rgb(189, 249, 234)')
// or
expect(circle).to.have.css('stroke', 'rgb(189, 249, 234)')
})
// or
.should('have.css', 'stroke', 'rgb(189, 249, 234)')
})