Sou novo no Cypress e configurei um monte de funções auxiliares em seu próprio arquivo. Quero que uma dessas funções retorne um valor, no entanto, estou ficando preso em como fazer isso dentro da estrutura síncrona do Cypress.
Continuo recebendo o erro
CypressError:
cy.then()
falhou porque você está misturando código assíncrono e síncrono.
Tentei implementar uma correção semelhante à mencionada aqui Cypress retornando valor síncrono dentro do comando assíncrono? mas sem sucesso.
Meu código é assim:
Função auxiliar:
//helperFunction.js
module.exports.schemaChecker = () => {
cy.get('script:contains("@context")').its('length').then((len) => {
cy.task('log', 'Schemas: ' + len);
if (len > 1) {
return "fail";
}
})
}
Arquivo de teste:
import { schemaChecker, } from '../../support/helperFunctions.js';
// other stuff...
Given('I am on X page', () => {
cy.viewport(1480, 1000);
cy.visit(pageUrl);
schemaChecker().then((response) => {
if (response == "fail") {
// Do something
};
})
});
Tentei algumas variações disso (por exemplo: if (schemaChecker() == "fail") {}
), mas não tenho certeza de como fazê-los funcionar juntos e não consegui encontrar nada útil no Google.
Alguém poderia me indicar a direção certa?
O erro que você está misturando é o código async e sync , que se refere à
cy.task()
chamada (que é async) e aoreturn 'fail';
(que é sync).Uma maneira de corrigir é tornar ambas as etapas assíncronas
Aqui está meu teste
e minha página de aplicativo com condição de erro deliberada