首页 > 解决方案 > How to save local storage cypress react

问题描述

Hi sorry for my bad English.

I am making a test in my project using cypress. I have found this problem/issue after

it("call login",() => ...)

The cypress clears my local storage deleting my auth, causing the next request returning my auth as undefined as it was deleted in local storage

How to save the local storage after it calling the above login?

标签: reactjstestingcypress

解决方案


您可以使用cypress-localstorage-commands插件localStorage在测试之间进行保存。

您可以创建一个使用特定用户登录的命令:

import "cypress-localstorage-commands";

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

然后在所有测试之前使用该命令进行登录,并使用cypress-localstorage-commands 插件来保留localStorage测试之间的时间:

describe("When user is authenticated", () => {
  before(() => {
    cy.loginAs("foo@user.com", "foo-password");
  });

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

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

  it("should be logged in", () => ...);
});

推荐阅读