es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cypress parece reiniciar la prueba después de cy.visit.

Tengo la siguiente prueba utilizando Cypress:

// myTest.spec.ts

console.log("the test is starting");
describe("My Test Describe", () => {
  const testEmail = makeRandomEmail();
  console.log("test email", testEmail);

  it("should set up the profile", () => {
    // setupProfile solo realiza algunas solicitudes y devuelve una promesa
    cy.wrap(setupProfile(testEmail), {
      timeout: 15000,
    });
  });

  it("should test the thing", () => {
    // makeAppUrl simplemente devuelve una cadena
    cy.visit(makeAppURL());
    /* aquí ocurren cosas de prueba que dependen del correo electrónico de prueba generado */
  });
});

Esto funciona bien cuando lo ejecuto en mi entorno de desarrollo (que no tiene un puerto en la URL ya que está en el puerto 443).

Sin embargo, estoy encontrando un escenario extraño donde, cuando ejecuto las pruebas en mi servidor local (en el puerto 3000), ocurre lo siguiente:

  1. registra “the test is starting” y “test email generatedTestEmail” en la consola del navegador.
  2. ejecuta setupProfile correctamente y esa prueba pasa.
  3. Luego, recarga toda la prueba aparentemente y vuelve a registrar lo que se encuentra en (1) (con un nuevo correo electrónico generado), pero (2) sigue apareciendo como aprobado.
  4. Intenta ejecutar mi bloque it("should test the thing"), lo cual falla porque ahora tengo un nuevo correo electrónico de prueba de usuario.

Cuando cambio únicamente mi host para que apunte a mi entorno de desarrollo en lugar de local, funciona correctamente y no se recarga como se describe en (3).

¿Alguien ha experimentado algo similar antes? ¿Podría estar relacionado con el hecho de que tengo el puerto en la URL?

Tags:  

Answer

  1. Avatar for davy.ai

    Parece que el problema que estás experimentando puede estar relacionado con el hecho de que estás usando un número de puerto en la URL de tu servidor local. Cuando Cypress visita la URL, puede interpretar el puerto como un cambio en el dominio u origen, lo que causa que recargue todo el test.

    Una solución potencial podría ser definir la opción de configuración baseUrl en tu archivo de configuración de Cypress para que apunte a la URL de tu servidor local con el puerto incluido. Esto debería asegurarse de que Cypress no interprete el puerto como un cambio en el origen.

    Otra solución potencial podría ser envolver tu test en una condición que solo genere el correo electrónico aleatorio si se está ejecutando contra tu URL de servidor local. Esto debería evitar que Cypress genere un nuevo correo electrónico en cada ejecución del test.

    Por ejemplo:

    console.log("comienza el test");
    describe("Mi descripción del test", () => {
    
      let testEmail = "";
    
      if (Cypress.config().baseUrl.includes(":3000")) {
        // genera un nuevo correo electrónico solo si se está ejecutando contra la URL del servidor local
        testEmail = makeRandomEmail();
        console.log("correo electrónico de test", testEmail);
      }
    
      it("debería configurar el perfil", () => {
        cy.wrap(setupProfile(testEmail), {
          timeout: 15000,
        });
      });
    
      it("debería probar algo", () => {
        cy.visit(makeAppURL());
        /* ocurren cosas de prueba aquí que dependen del correo electrónico de test generado */
      });
    });
    

    Al verificar la baseUrl en la configuración de Cypress, puedes generar condicionalmente un nuevo correo electrónico solo cuando se ejecute contra tu URL de servidor local, mientras mantienes el mismo correo electrónico para todos los demás entornos.

    ¡Espero que esto ayude!

Comments are closed.