赛普拉斯 |使用在 beforeEach 钩子中声明的变量

Cypress | using variables declared in beforeEach hook

在我的 e2e 测试中,我在 beforeEach 挂钩中声明了一些变量,以便稍后在测试中使用它们。

当前解决方案:

    beforeEach(() => {
      // some variables are declared here
      // using cy.wrap only for presentation purpose
      cy.wrap({ foo: 1 })
        .as('foo')
      cy.wrap({ bar: 2 })
        .as('bar')
    })

    it('some test', () => {
      cy.get('@foo')
        .then((foo) => {
          cy.get('@bar')
            .then((bar) => {
              // here I have access to these variables
            })
        })
    })

这很好用,但是如果我有 10 个变量要传递给测试呢?然后我有 10 个嵌套 .then 看起来不太好。

我知道我可以在 context 中使用 let 声明这些变量,然后在测试中访问它们,但不推荐在 Cypress 中处理变量。

    let globalFoo
    let globalBar
    
    beforeEach(() => {
      // some variables are declared here
      // using cy.wrap only for presentation purpose
      cy.wrap({ foo: 1 })
        .then((foo) => {
          globalFoo = foo
        })
      cy.wrap({ bar: 2 })
        .then((bar) => {
          globalBar = bar
        })
    })

    it('some test', () => {
      // now I have access to them too
      cy.wrap(globalBar)
      cy.wrap(globalFoo)
    })

有没有什么方法可以将许多变量从 beforeEach 挂钩传递给测试并保持干净的代码?

您可以使用 this.* 表示法访问 cypress 变量而无需 then 回调:

    beforeEach(() => {
      // some variables are declared here
      // using cy.wrap only for presentation purpose
      cy.wrap({ foo: 1 })
        .as('foo')
      cy.wrap({ bar: 2 })
        .as('bar')
    })

    it('some test', function() {
        // here I have access to these variables
        console.log(this.foo + this.bar)   
    })

请注意,在 it 语句中使用了函数回调,因为这在箭头回调 (() => {})

中不起作用