Isso parece tão incrivelmente básico que tenho vergonha de perguntar ao Stack Overflow, mas juro que tentei pesquisar no Google e ver os documentos do Cypress primeiro!
Pergunta simples: Cypress tem asserções ( cy.should
) e uma maneira de pausar o executor de teste ( cy.pause
) ... existe alguma maneira de conectar os dois, de modo que, se should
falhar, o executor de teste faça uma pausa?
Eu sei que posso fazer:
cy.should(whatever)
.pause();
... mas isso sempre faz uma pausa . Eu só quero fazer uma pausa se falhar should
.
PS Você pode pensar:
try {
cy.should(whatever)
} catch (err) {
cy.pause();
}
funcionaria ... mas não funciona, porque (como tudo no Cypress) o lançamento real do erro não acontece na should
linha ... acontece mais tarde (quando não pode ser detectado).
Da mesma forma, tentei fazer:
cy.on('uncaught:exception', () => {
cy.pause();
});
cy.should(whatever);
Mas não funciona, provavelmente porque quando o erro é detectado usando cy.on
, já é tarde demais para fazer uma pausa.
Você responde falha com
Mas se você apenas trocar
.then()
comoshould()
a mensagem sugereele também falha porque
expect()
é síncrono ecy.pause()
assíncrono - as.then()
execuções até a conclusão antes que o comando de pausa recém-enfileirado possa ser executado.Use um ramo else
Mas observe que com esse padrão você perde a tentativa novamente.
Eu descobri que você pode usar o formulário de retorno de chamada
should
para resolver isso. Em vez de:faça o (mais detalhado):