javascript - Cypress 在使用 cy.visit() 时注销

标签 javascript automated-tests authorization cypress

我正在发送多个 API 请求并且一切正常,直到我尝试导航到 API 测试期间生成的页面。当我使用 cy.visit() 函数导航到页面时,我得到了未经授权,并且所有后续请求都在没有授权 token 的情况下发送,即使我将授权 header 添加到 cy.visit() 函数。

任何帮助将不胜感激

    var accessToken
    before(function () {
        cy.request({
            method: 'POST',
            url: 'https://someurl.com/connect/token',
            form: true,
            body: {
                grant_type: 'password',
                username: 'admin',
                password: 'pass',
                client_id: 'client_id',
                client_secret: 'secret'
            }
        }).then((response) => {
            accessToken = response.body.access_token
        })
    })
   
   //api requests

    it('Navigates to order page', () => {
        cy.visit(`https://someurl.com/orders/${orderId}`, { auth: { bearer: accessToken.replace('Bearer ', '') } })
    })

enter image description here

enter image description here

最佳答案

您的代码看起来像 Cypress Docs: Core Concepts: Aliases 中的反模式示例例子。使用as要创建别名,您可以执行以下操作:

before(function () {
    cy.request({
        method: 'POST',
        url: 'https://someurl.com/connect/token',
        form: true,
        body: {
            grant_type: 'password',
            username: 'admin',
            password: 'pass',
            client_id: 'client_id',
            client_secret: 'secret'
        }
    }).then((response) => {
        cy.wrap(response.body.access_token).as('accessToken')
    })
})

//api requests

it('Navigates to order page', function() {
  const accessToken = this.accessToken
  cy.visit({
    url: `https://someurl.com/orders/${orderId}`,
    headers: {
      'Authorization': accessToken
    }
  })
})

注意:有必要将 it() block 的闭包从箭头函数更改为常规函数,因为箭头函数使用词法作用域 this,并且不会包含在 before() 闭包中创建的别名。

关于javascript - Cypress 在使用 cy.visit() 时注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63251334/

相关文章:

javascript - 为什么我的主干集合包含空模型项?

Javascript 返回和 if/else

javascript - Firebase制定安全规则以仅允许获取查询的大小

Android:谷歌地图 Android API:授权失败

ruby-on-rails - 使用 token 对 API 进行身份验证

javascript - 注入(inject) Controller 和模拟 AngularJS 服务

java - 为什么有些测试没有在我的 Gradle 构建中执行?

javascript - testcafe firefox 允许自动播放

c# - Atata:无法找到 CheckBox 元素

authentication - 使用 CAS(中央身份验证服务)的 Web2py 授权