Cypress setCookie не работает должным образом - PullRequest
0 голосов
/ 31 октября 2019

Я добавил команду getCSRFToken, которая используется другими командами для получения токена CSRF для отправки запросов в мое приложение:

Cypress.Commands.add("getCSRFToken", () => {
  cy.getCookie('XSRF-TOKEN').then((cookie) => {
    if (!cookie) {
      return cy.request('HEAD', '/')
        .its('headers')
        .then((headers) => {
          const token = headers['x-xsrf-token'];
          if (!token) {
            throw new Error('XSRF token not found');
          }

          return cy.setCookie('XSRF-TOKEN', token)
            .then(() => token);
        });
    }

    return cookie.value;
  });
});

Часть, которая делает запрос HEAD, предназначена для использованияэтой функции, когда в тесте еще не было посещено ни одной страницы, например, при POST запросах на создание тестовых данных.

AFAICT это похоже на то, что оно должно работать для меня, однако кажется, что последующие вызовы getCookie фактически ничего не извлекает:

enter image description here

enter image description here

Я думал вернуть setCookie обещание и getCookie обещание могут иметь значение, но, похоже, это не так.

1 Ответ

0 голосов
/ 31 октября 2019

По умолчанию Cypress очищает все куки перед каждым тестом. У них есть API для хранения файла cookie для следующего выполнения теста: Cypress.Cookies.preserveOnce

. В вашем случае вы можете вызвать Cypress.Cookies.preserveOnce ('XSRF-TOKEN') на уровне набора beforeEach в каждом номере, где вы хотите получить токен. Если вы не хотите повторять вызов, вы можете переместить его в команду getCSRFToken .

Cypress.Commands.add("getCSRFToken", () => {
  Cypress.Cookies.preserveOnce('XSRF-TOKEN')
  cy.getCookie('XSRF-TOKEN').then((cookie) => {
    .....
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...