Este team de expertos despúes de algunos días de investigación y recopilar de información, obtuvieron los datos necesarios, nuestro deseo es que te sea útil para tu trabajo.
Solución:
Aquí hay un ejemplo de cómo agregar un comando cy.login()
que puede usar en cualquier prueba de Cypress, o poner en un beforeEach
gancho.
Cypress.Commands.add('login', () =>
cy.request(
method: 'POST',
url: 'http://localhost:3000/api/users/login',
body:
user:
email: '[email protected]',
password: 'jakejake',
)
.then((resp) =>
window.localStorage.setItem('jwt', resp.body.user.token)
)
)
Luego en tu prueba:
beforeEach(() =>
cy.login()
)
Como extra, también puede usar el paquete cypress-localstorage-commands para persistir localStorage entre pruebas, por lo que la solicitud de inicio de sesión se realizará solo una vez:
En soporte/comandos.js:
import "cypress-localstorage-commands";
Cypress.Commands.add('login', () =>
cy.request(
method: 'POST',
url: 'http://localhost:3000/api/users/login',
body:
user:
email: '[email protected]',
password: 'jakejake',
)
.its('body')
.then(body =>
cy.setLocalStorage("jwt", body.user.token);
)
);
Entonces, en tus pruebas:
before(() =>
cy.login();
cy.saveLocalStorage();
);
beforeEach(() =>
cy.restoreLocalStorage();
);
He usado algo similar a la respuesta de bkuceras desde hace un tiempo. Recientemente me encontré con un problema al probar múltiples roles/inicios de sesión a lo largo de las pruebas. Básicamente, lo que sucede es que inicio sesión como administrador y hago una prueba, luego inicio sesión como no administrador y hago una segunda prueba. La primera prueba funciona bien y finaliza (cypress borra el almacenamiento local); sin embargo, todavía hay algunas solicitudes xhr ejecutándose desde la primera prueba cuando comienza la segunda prueba. Estas solicitudes xhr ya no ven el token que activa mi aplicación para ver un error no autorizado 401 y borrar el almacenamiento local (incluido mi token no administrador que configuré). Ahora, la segunda prueba falla porque ese token que no es de administrador no está disponible en el almacenamiento local.
En última instancia, mi solución fue obtener previamente el token antes de la prueba y luego configurar el token en la función de visita onBeforeLoad. Esto asegura que el token no se borre por ninguna condición de carrera antes de su comando de visita.
cy.visit('/app',
onBeforeLoad: function (window)
window.localStorage.setItem('token', myToken);
)
Realmente, este es un caso extremo bastante único, pero espero que pueda ayudar a alguien, ya que pasé muchas horas buscando esta solución.
Tienes la opción de añadir valor a nuestra información añadiendo tu veteranía en las explicaciones.