Tengo un problema al intentar compartir un alias entre dos pasos en Cypress. Básicamente, lo que estoy tratando de hacer es en el primer paso, obtengo el valor y lo paso como una variable storedOddsValue . En el segundo paso, cuando intento obtener ese valor de alias y completar el paso, falla porque creo que regresa con undefined.
Lo sé porque en lugar de usar:
let storedOddsValue = oddslib.from("fractional", cy.get("@storedOddsValue"));Si reemplazo el alias con el valor codificado de esta manera:
let storedOddsValue = oddslib.from("fractional", "13/5");Todo el código a continuación se ejecuta bien y la afirmación pasa. Entonces, mi pregunta es qué estoy haciendo mal, ¿por qué no obtiene el alias?
Then ("The prices are formatted in fractions by default", () => { priceFormatElements.priceFormatDropdown().should('have.value', 'Fraction'); const oddsValue = oddsSelectionElements.oddsButton().first().invoke("text"); oddsValue.then((oddsValue) => { expect(oddsValue.trim()).contains("/"); oddsValue.trim(); }).as("storedOddsValue") }) Then ("The prices are formatted in {string}", (priceFormat) => { let expectedOddsValue; let currentOddsValue = oddsSelectionElements.oddsButton().first().invoke("text"); //let storedOddsValue = oddslib.from("fractional", "13/5"); let storedOddsValue = oddslib.from("fractional", cy.get("@storedOddsValue")); switch (priceFormat) { case "Fractional": expectedOddsValue = storedOddsValue.to("fractional"); break; case "Decimal": expectedOddsValue = storedOddsValue.to("decimal", {precision: 2}); break; case "American": expectedOddsValue = "+" + storedOddsValue.to("moneyline"); break; default: throw new Error('unknown price format: ' + priceFormat); } currentOddsValue.then((oddsValue) => { expect(oddsValue.trim()).equals(expectedOddsValue); }); })No estoy seguro de lo que hace oddslib.from , pero para usarlo con un alias necesita anidar de esta manera
Then (... () => { let expectedOddsValue let currentOddsValue = oddsSelectionElements.oddsButton().first().invoke("text") cy.get("@storedOddsValue").then(aliasValue => { let storedOddsValue = oddslib.from("fractional", aliasValue) switch (priceFormat) { ... } currentOddsValue.then((oddsValue) => { expect(oddsValue.trim()).equals(expectedOddsValue); }); }) // end of cy.get("@storedOddsValue") }) Porque cy.get("@storedOddsValue") es asíncrono, y switch() se ejecuta antes de dar su valor.