Saltar al contenido

Preservar la sesión de cookies / localStorage en todas las pruebas en Cypress

Solución:

Para actualizar este hilo, ya existe una mejor solución disponible para conservar las cookies (por @bkucera); pero ahora hay una solución alternativa disponible para guardar y restaurar el almacenamiento local entre las pruebas (en caso de que sea necesario). Recientemente enfrenté este problema; y encontré que esta solución funcionaba.

Esta solución es mediante el uso de comandos de ayuda y consumiéndolos dentro de las pruebas,

Dentro – cypress/support/<some_command>.js

let LOCAL_STORAGE_MEMORY = {};

Cypress.Commands.add("saveLocalStorage", () => {
  Object.keys(localStorage).forEach(key => {
    LOCAL_STORAGE_MEMORY[key] = localStorage[key];
  });
});

Cypress.Commands.add("restoreLocalStorage", () => {
  Object.keys(LOCAL_STORAGE_MEMORY).forEach(key => {
    localStorage.setItem(key, LOCAL_STORAGE_MEMORY[key]);
  });
});

Luego, en la prueba,

beforeEach(() => {
  cy.restoreLocalStorage();
});

afterEach(() => {
  cy.saveLocalStorage();
});

Referencia: https://github.com/cypress-io/cypress/issues/461#issuecomment-392070888

De los documentos de Cypress

Para cookies persistentes: De forma predeterminada, Cypress borra automáticamente todas las cookies antes de cada prueba para evitar que se acumule el estado.

Puede configurar cookies específicas para que se conserven en las pruebas utilizando la API de Cypress.Cookies:

// now any cookie with the name 'session_id' will
// not be cleared before each test runs
Cypress.Cookies.defaults({
  preserve: "session_id"
})

NOTA: Antes de Cypress v5.0, la clave de configuración es “lista blanca”, no “preservar”.

Para persistir localStorage: No está integrado en un cajero automático, pero puede lograrlo manualmente en este momento porque el método que es el almacenamiento local claro se expone públicamente como Cypress.LocalStorage.clear.

Puede hacer una copia de seguridad de este método y anularlo según las claves enviadas.

const clear = Cypress.LocalStorage.clear

Cypress.LocalStorage.clear = function (keys, ls, rs) {
  // do something with the keys here
  if (keys) {
    return clear.apply(this, arguments)
  }

}

Puede agregar su propio comando de inicio de sesión a Cypress y usar el paquete cypress-localstorage-commands para conservar localStorage entre pruebas.

En support/commands:

import "cypress-localstorage-commands";

Cypress.Commands.add('loginAs', (UserEmail, UserPwd) => {
  cy.request({
    method: 'POST',
    url: "/loginWithToken",
    body: {
      user: {
        email: UserEmail,
        password: UserPwd,
      }
    }
  })
    .its('body')
    .then((body) => {
      cy.setLocalStorage("accessToken", body.accessToken);
      cy.setLocalStorage("refreshToken", body.refreshToken);
    });
});

Dentro de tus pruebas:

describe("when user FOO is logged in", ()=> {
  before(() => {
    cy.loginAs("[email protected]", "fooPassword");
    cy.saveLocalStorage();
  });

  beforeEach(() => {
    cy.visit("/your-private-page");
    cy.restoreLocalStorage();
  });

  it('should exist accessToken in localStorage', () => {
    cy.getLocalStorage("accessToken").should("exist");
  });

  it('should exist refreshToken in localStorage', () => {
    cy.getLocalStorage("refreshToken").should("exist");
  });
});
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *