Javascript 如何在运行测试之前登录和注销用户

Javascript 如何在运行测试之前登录和注销用户,javascript,cypress,Javascript,Cypress,在Cypress中,我试图在后端测试一些东西。我真的很难控制用户是否登录 在开发特性时,我正在尝试自动化我所做的所有测试。我花了很多时间和精力来控制用户是否登录 我正在寻找执行以下操作的命令: 在开始任何测试时,注销任何用户(如果已登录) 执行以下操作的快速方法:cy.login('foo@example.org“,”密码“) 由于这将必须在许多测试之前运行,因此最好简化它 它被用于Laravel/Vue应用程序(因此是CSRF令牌) 我目前的尝试: Cypress.Commands.add(“

在Cypress中,我试图在后端测试一些东西。我真的很难控制用户是否登录

在开发特性时,我正在尝试自动化我所做的所有测试。我花了很多时间和精力来控制用户是否登录

我正在寻找执行以下操作的命令:

  • 在开始任何测试时,注销任何用户(如果已登录)
  • 执行以下操作的快速方法:
    cy.login('foo@example.org“,”密码“)
  • 由于这将必须在许多测试之前运行,因此最好简化它

    它被用于Laravel/Vue应用程序(因此是CSRF令牌)

    我目前的尝试:
    Cypress.Commands.add(“登录用户”、(电子邮件、密码)=>{
    cy.server();
    //资料来源:https://github.com/cypress-io/cypress/issues/413
    sessionStorage.clear();
    cy.clearCookies();
    cy.clearLocalStorage();
    cy.window()。然后((win)=>{
    win.sessionStorage.clear()
    });
    cy.visit(Cypress.env('baseUrl')+“/login”);
    cy.location()应((loc)=>{
    expect(loc.pathname).to.eq(“/login”)
    });
    cy.get(“头元[name=csrf令牌]”)
    .然后((元)=>{
    const csrf=meta[0]。内容;
    赛义德请求({
    方法:“POST”,
    url:“/login”,
    正文:{
    _令牌:csrf,
    电邮:电邮,,
    密码:密码
    }
    });
    });
    cy.visit(Cypress.env('baseUrl')+“/login”);
    });
    
    这方面的问题是:

    • 出于某种奇怪的原因。。。每秒钟,用户都会保持从上一个会话登录的状态。但是如果发生这种情况,我只需要再次运行它,然后用户就注销了。它快把我逼疯了
    • 它不慢,但也不快(考虑到我做了无数次)。因此,如果它可以做得更快(页面加载更少),那么它将是非常棒的

    尝试使用另一种方法清除本地存储。例如,我正在使用这些命令来保存、恢复和清除存储,并且工作得非常好。我用这些来登录/注销

    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]);
      });
    });
    
    Cypress.Commands.add("clearLocalStorageCache", () => {
      localStorage.clear();
      LOCAL_STORAGE_MEMORY = {};
    });
    

    我试过这个,但没有其他结果。不过谢谢你的参与。