微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在访问在本地主机上运行的反应应用程序之前在 Cypress 中设置 cookie

如何解决如何在访问在本地主机上运行的反应应用程序之前在 Cypress 中设置 cookie

我想采取的步骤是:

  1. 启动 Cypress 测试套件并使用 cy.setCookie 设置 JSESSIONID cookie(已获取且是最新的)
  2. 设置 cookie 后,然后使用 cy.visit 访问正在运行的应用

问题:

  • cy.visit 运行之前未设置 cookie,这会导致应用重定向到未经授权的页面

到目前为止我做了什么:

Cypress.Cookies.defaults({
  preserve: 'JSESSIONID'
})

cy.setCookie('JSESSIONID',Cypress.env('JSESSIONID'),{
  path: '/',domain: '<domain.name>',httpOnly: true,secure: true,sameSite: 'no_restriction',log: true,}).then(() => cy.visit('localhost:3000/<authenticated-route>')

值得一提的是 的形式是 www.staging.etc.com 而在本地运行:localhost:3000/

任何帮助将不胜感激。提前致谢

解决方法

看看Provide an onBeforeLoad callback function

提到的示例配方(代码为 here)正在本地存储中设置令牌,但也应适用于 cookie

cy.visit('http://localhost:3000/#dashboard',{
  onBeforeLoad: (contentWindow) => {
    cy.setCookie('JSESSIONID',Cypress.env('JSESSIONID'),{
      path: '/',...
    })
  }
})

我认为问题在于 cy.visit() 是清除一切的地方之一,但提供了钩子来解决这个问题。不过,我希望 preserve 也能正常工作。

,

我通过在使用 cy.visit 之前执行 cy.request 登录解决了这个问题。

代码看起来像这样:

const login = () => {
  const headers = new Headers()
  headers.append("Content","application/x-www-form-urlencoded")
  headers.append("Accept-Encoding","gzip:deflate")
  headers.append("Content-Type","application/x-www-form-urlencoded")

  cy.request({
    url: Cypress.env("LOGIN_URL"),method: 'POST',form: true,headers,body: {
      "email": Cypress.env("EMAIL"),"password": Cypress.env("PASSWORD")
    }
  }).then((response) => {
    console.log(response)
    console.log(response.body)
    setCookie(response.COOKIE)
  })
}

export const loginAndStartTests = () => {
  login()
  cy.visit('/<homepage>')
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。