Набор токенов удаляется при запуске теста на кипарис - PullRequest
0 голосов
/ 27 марта 2020

Есть идеи, почему набор «токенов» в localStorage удаляется во время теста на кипарис? У меня есть функция loadToken (), записанная в файле команд. js, во время выполнения теста я мог видеть, что токен был установлен, но как только вызывается cy.visit('/dashboard'), токен удаляется / исчезает и по-прежнему отображает страница входа и не позволяет войти. Точно так же работали с некоторыми другими проектами. примечание: когда мы действительно нажимаем baseUrl [https://some-url.net] , это фактически добавляет следующее расширение к URL '/ auth / login'

Cypress.Commands.add('loadTokens', () => {
    return cy.fixture('tokenData.json').then(data => {
        const keys = Object.keys(data);
        keys.forEach(key => {
            window.localStorage.setItem(key, data[key]);
        });
    });
});

Я звоню loadTokens() и loginRequest() внутри перед каждым;

context('Login and Logout test',()=>{
before(()=>{
cy.visit('/');
})

beforeEach(() => {
cy.loadTokens();
cy.loginRequest();
})

it.only('Check whether the login is possible',()=>{
    cy.viewport(1600, 1000); 
    cy.get('#offCanvasLeft > ul > li > a > span').eq(1).invoke('text').then((text)=>{
        expect(text).to.equal("Dashboard");
    }) 
})

})

Cypress.Commands.add('loginRequest', () => {
  const accessToken = localStorage.getItem('tokens');
    var cookieValue = document.cookie.split(';');
    cy.request({
      method: 'GET',
      url: baseUrl+`/dashboard`,
      headers: {
        'content-type': 'text/html',
        'tokens': `${accessToken}`,
        'cookie': `${cookieValue}`
      }
    })
  })

// cypress. json file:

{
  "baseUrl": "https://some-url.net",
  "numTestsKeptInMemory": 3,
  "chromeWebSecurity": false
}

// Перед тем, как проверить кипарис, наберите команду cy.visit() Я могу видеть набор токенов. enter image description here

1 Ответ

0 голосов
/ 28 марта 2020

Этот Пример рецепта Cypess показывает немного другой шаблон для использования токенов в локальном хранилище и cy.visit ().

// but set the user before visiting the page
// so the app thinks it is already authenticated
beforeEach(function setUser () {
  cy.visit('/', {
    onBeforeLoad (win) {
      // and before the page finishes loading
      // set the user object in local storage
      win.localStorage.setItem('user', JSON.stringify(user))
    },
  })
  // the page should be opened and the user should be logged in
})

Я предполагаю, что обратный вызов onBeforeLoad() используется для преодоления проблемы, с которой вы сталкиваетесь, когда cy.visit () очищает локальное хранилище.

Итак, ваш код будет выглядеть примерно так это

beforeEach(function setTokensAndVisit () {
  cy.fixture('tokenData.json').then(tokenData => {
    cy.visit('/dashboard', {
      onBeforeLoad (win) {

        // Set cookie or load localStorage with tokenData here,
        // depending on how your app checks that user is authorized.

        // In a SPA app, this check is likely to done in the router

      },
    })
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...