Cypress - нужны данные с нескольких страниц на разных URL - PullRequest
2 голосов
/ 14 января 2020

Я новичок в кипарисе. Мой сценарий выглядит следующим образом:

1) Go на тестовую страницу.

2) Запустите сценарий инициализации, который взаимодействует с сервером и создает сеанс.

3) Go бэк-офис

4) Убедитесь, что новый сеанс отображается в таблице

Идентификатор сеанса получен с тестовой страницы. Когда я инициирую сеанс, я получаю sessionId в качестве ответа (это часть моего теста).

Проблема в том, что когда я go отправляю в бэк-офис (используя cy.visit), весь Сеанс Cypress сбрасывается, и я теряю sessionId.

Я пытался использовать глобальные переменные и псевдонимы, но безрезультатно.

Есть ли способ передать переменную sessionId в тест backoffice?

Вот мой код:

describe('Session init', () => {
let requestBody;
let responseBody;
let sessionId;
  describe('Init the session in the client', () => {
    before(() => {
      cy.server();
      cy.route({
        method: 'POST',
        url: initUrl,
        onRequest: (xhr) => {
          requestBody = xhr.request.body;
        },
        onResponse: (xhr) => {
          responseBody = xhr.response.body;
        }
      }).as('init');
      visitTestPage(); // uses cy.visit to go to the test page - also initiates a new session
    });

    it('should send POST init request', () => {
      cy.wait('@init').then(() => {
        expect(requestBody).to.contain.keys(
          keysToExpectInRequest
        );
      });
    });

    it('should receive an init response', () => {
      cy.wrap(responseBody.session).as('session');
      sessionId = responseBody.session;
      expect(responseBody).to.contain.keys(
        keysToExpectInResponse
      );
    });
  });

  describe('Verify a session was created in backoffice', () => {
    before(() => {
      backofficeLogin(); // using cy.server and cy.visit, using premade jwt to avoid UI login
    });

    it('should see a live session with the id from the init', () => {
      cy.get('.session-row').then((sessions) => {
        expect(session[0].id).toEqual(sessionId); // expect the latest session created to be with the id of the session created in the test page
      });
    });
  });
});

1 Ответ

1 голос
/ 14 января 2020

Если вы сохраните идентификатор сессии в кулинарии ie, вы можете использовать это:

cy.wrap(responseBody.session).as('session');
sessionId = responseBody.session;
cy.setCookie('sessionId', sessionId);

do c

Но это не рекомендуется, потому что каждый выполняемый вами тест должен быть независимым друг от друга: do c

...