Estoy tratando de hacer una prueba de Cypress en la que quiero configurar una entrada de un número aleatorio y luego verificar que el número aleatorio esté configurado correctamente en otra página. Estoy creando el número aleatorio con esta función:
function getRandomArbitrary(min, max, decimals) { return (Math.random() * (max - min) + min).toFixed(decimals); }Y configurando las variables dentro de la descripción como:
describe('Reflect changes from X to the Y', () => { const termCap = getRandomArbitrary(0.01, 0.3, 2); const termCapFee = getRandomArbitrary(0.01, 0.3, 2);El problema que tengo actualmente es que las variables se restablecen en cada it() diferente que creo. Y no sé qué sucederá porque quiero ser el mismo número constante en todas las pruebas.
Intenté configurarlos en un antes () pero tampoco funcionó.
¿Alguien sabe cómo debo crear las variables?
Intenté configurarlos en un antes () pero tampoco funcionó.
El bloque before debería funcionar. ¿Quizás el bloque before no está configurado correctamente? Puedo hacer que esto funcione usando la siguiente configuración.
describe("Foo Fighter", function() { var foo; before(function () { foo = getRandomArbitrary(1,10,1); }); it("Fighting foo 1", function () { cy.log(foo); }); it("Fighting foo 2", function () { cy.log(foo); }); it("Fighting foo 3", function () { cy.log(foo); }); }); function getRandomArbitrary(min, max, decimals) { return (Math.random() * (max - min) + min).toFixed(decimals); } Lo que produce el siguiente resultado, el número aleatorio permanece igual durante cada bloque it
El flujo lógico es:
describe , declara tu variable.before , establezca su variable usando el número aleatorio.it , use la variable set.EDITAR :
Para responder a tu comentario:
Si lo configuro como tú, funciona bien, pero imagina si en el primero visitas google y en el segundo visitas github, el bloque anterior se ejecutará dos veces.
El problema aquí es que cuando visita un sitio nuevo, Cypress vuelve a cargar todo el contexto de prueba, por lo que un bloque before , como mencionó, se ejecutará nuevamente cada vez que se vuelva a cargar el contexto de prueba (es decir, cada vez que se visite un nuevo dominio).
La forma de evitar esto es hacer trampa configurando otra descripción que se ejecute primero y escribiendo sus variables en los accesorios y usándolos en su prueba, así:
describe("Before Describe", function(){ const foo = getRandomArbitrary(1,10,1); it("Setting up test context", function() { cy.writeFile("cypress/fixtures/test.json", { "foo" : foo}); }); }); describe("Foo Fighter", function() { it("Fighting foo 1", function () { cy.visit("https://example.cypress.io"); cy.fixture("test.json").then(kung => { cy.log(kung.foo); }) }); it("Fighting foo 2", function () { cy.visit("https://google.com") cy.fixture("test.json").then(kung => { cy.log(kung.foo); }) }); it("Fighting foo 3", function () { cy.fixture("test.json").then(kung => { cy.log(kung.foo); }) }); }); function getRandomArbitrary(min, max, decimals) { return (Math.random() * (max - min) + min).toFixed(decimals); }Esto producirá los siguientes resultados:
Es cierto que no es la forma más limpia de construir su flujo de prueba, sin embargo, produce el resultado que busca. También debería funcionar si coloca la configuración en un it que viene primero dentro de la misma describe que las otras pruebas.