在这个赛普拉斯测试中,我试图利用cy.waitUntil npm 包等待加载微调器不存在,然后继续运行测试,而不会有竞争条件导致 CI 测试失败的风险(目前测试失败是因为命令在组件全部加载完成之前在页面上制作。
在第一次尝试中,我尝试通过从包装器 div 上的属性“data-cy-isLoading”获取加载微调器的状态来断言其值取决于呈现微调器的相同逻辑。
cy.waitUntil(
() => {
let stillLoading = null
cy.get('[data-cy-isLoading]')
.then(val => (stillLoading = val[0].attributes[1].value))
.then(() => {
if(stillLoading === 'false'){
return true
}
})
},
{
timeout: 8000,
description: 'Await loading spinner',
}
)
这种尝试在我尝试调整它的所有方式中都失败了,如果满足if(stillLoading === 'false')条件并返回True被击中,则 cy.waitUntill 命令仍将无限期地继续重试,而不会退出 waitUntil 命令并继续测试
这种变化也不起作用。
cy.waitUntil(
() => {
let done;
let stillLoading;
cy.get('[data-cy-isLoading]')
.then(val => (stillLoading = val[0].attributes[1].value))
.then(() => {
if(stillLoading === 'false'){
done = true
}
})
done ? expect(done).to.be.true : false
},
{
timeout: 8000,
description: 'Await loading spinner',
}
)
接下来,我尝试通过在命令/断言上使用超时来简单地断言微调器自身的存在。
!!cy.get('[data-cy="spinningCircle"]', {timeout: 10000}).should('not.be.visible')
!!cy.get('[data-cy="spinningCircle"]', {timeout: 10000}).should('not.exist')
这些也不起作用,因为一旦无法找到元素 [data-cy=spinningCircle],它们就会失败