如何在赛普拉斯中声明localStorage

时间:2019-11-13 23:09:14

标签: javascript testing cypress

我担心自己的操作不正确,但是文档中没有明确的示例。

我有一个通过登录流程的测试。我还想验证登录后是否在localStorage内设置了某些值。

执行以下操作时,出现AssertionError,“预期存在空值”:

describe("Trying to log in...", function() {
  it("Visits the Home Page", function() {
    cy.visit("/") // Uses baseUrl prefix from config

    // [ ... snip ... ]

    // Form should be visible and fillable now!
    cy.get("form")
      .should("be.visible")
      .within(() => {
        cy.findByLabelText(/email address/i)
          .should("exist")
          .should("be.visible")
          .click() // Clicking the label should focus the element:
          .type("[test username]")
        cy.findByLabelText(/password/i)
          .click()
          .type("[test password]")
        cy.findByText(/sign in/i).click()
      })

    // Now we're logged in... 

    cy.url().should("include", "home")

    // ========= THE FOLLOWING BREAKS: =======================
    // Check for our localStorage item:
    expect(localStorage.getItem("KeyToOurValue")).to.exist()
  })
})

但是,如果我将expect放在最后一个should的回调中,它似乎可以正常工作吗?

describe("Trying to log in...", function() {
  it("Visits the Home Page", function() {
    cy.visit("/") // Uses baseUrl prefix from config

    // [ ... snip ... ]

    // Form should be visible and fillable now!
    cy.get("form")
      .should("be.visible")
      .within(() => {
        cy.findByLabelText(/email address/i)
          .should("exist")
          .should("be.visible")
          .click() // Clicking the label should focus the element:
          .type("[test username]")
        cy.findByLabelText(/password/i)
          .click()
          .type("[test password]")
        cy.findByText(/sign in/i).click()
      })

    // Now we're logged in... 

    cy.url().should("include", "home", ()=> {
        // ========= THE FOLLOWING WORKS! ========
        // Check for our localStorage item:
        expect(localStorage.getItem("KeyToOurValue")).to.exist()
    })
  })
})

那是我应该怎么做的?

看来我应该能够做到第一条呢?

在运行特定的cy行之后,关于localStorage值的资产的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您应该在should块中声明localStorage吗?是的你应该。 Check out the official example from Cypress


对于 cy命令(cy.put,cy.get ...),它们已入队并由Cypress接连运行。另一方面,非cy命令(期望)会立即执行。因此,如果期望留在 should()之外,则您的localStorage将不可用,因为登录尚未完成。

通过在应该内部移动期望,这意味着它在完成 cy.url()之后运行。由于 cy.url 是赛普拉斯内部队列中的最后一项,因此其他cy命令(cy.visit,cy.get,cy.findBy ...)已经完成。 >