Cypress выходит из системы при использовании cy.visit () - PullRequest
2 голосов
/ 04 августа 2020

Я отправляю несколько запросов API, и все работает нормально, пока я не попытаюсь перейти на страницу, созданную во время тестирования API. Когда я перехожу на страницу с помощью функции cy.visit (), я становлюсь неавторизованным, и все последующие запросы отправляются без токена авторизации, хотя я добавил заголовок авторизации в функцию 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

введите описание изображения здесь

1 Ответ

0 голосов
/ 04 августа 2020

Ваш код выглядит как пример антипаттерна в примере Cypress Docs: Core Concepts: Aliases . Используя как для создания псевдонима, вы можете сделать что-то вроде:

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() с стрелочную функцию в обычную функцию, поскольку стрелочная функция использует лексическую область видимости this и не будет включать псевдоним, созданный в закрытии before().

...