You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cypress中访问beforeEach内通过cy.wrap定义的别名变量?

报错原因
  • 核心问题是it测试用例的回调使用了箭头函数:Cypress 中通过.as()定义的别名会挂载到测试上下文对象上,而箭头函数不会绑定独立的this,会继承外层作用域的this,无法访问到 Cypress 挂载的上下文属性,因此this.auth读取为 undefined。
  • 无其他异步顺序问题,Cypress 命令会自动排队执行,只要上下文正确就可以正常拿到别名对应的值。
修复方案

你可以选择以下任意一种方案解决:

方案1:将it的回调改为普通函数

修改回调函数声明方式,让this可以指向 Cypress 测试上下文:

beforeEach(() => {
  cy.login(email).then((token) => {
    let headers = { "x-access-token": token }
    cy.wrap(headers).as("auth")
  })
})

// 把箭头函数 () => {} 替换为普通函数 function() {}
it("Buy " + par, function() {
  if (stables.indexOf(par) < 0) {
    cy.request({
      method: "POST",
      url: url,
      headers: this.auth,
      body: payloadBUYToken,
    })
  }
})

方案2:通过cy.get('@别名')直接读取值,不依赖this上下文

这种方式不需要修改函数类型,避免上下文绑定的坑:

beforeEach(() => {
  cy.login(email).then((token) => {
    let headers = { "x-access-token": token }
    cy.wrap(headers).as("auth")
  })
})

it("Buy " + par, () => {
  if (stables.indexOf(par) < 0) {
    // 直接获取别名对应的变量值
    cy.get('@auth').then(auth => {
      cy.request({
        method: "POST",
        url: url,
        headers: auth,
        body: payloadBUYToken,
      })
    })
  }
})

内容的提问来源于stack exchange,提问作者by3by3byt3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:45:05