Состояние браузера Cypress поддерживает вход в систему. Как мне предотвратить это? - PullRequest
0 голосов
/ 06 июня 2018

Я написал несколько тестов cypress e2e для приложения, которое требует входа в систему. Я написал успешные тесты, однако тесты начали проваливаться.Тесты ожидают, что приложение выйдет из системы при запуске, иначе не получится при поиске полей электронной почты и пароля.Когда Cypress открывает окно браузера, приложение входит в систему. Ранее я просто выходил из браузера Cypress и перезапускал тест.Теперь он снова откроется, как если бы он все еще вошел в систему.

Как я могу предотвратить запуск окна браузера Cypress с уже зарегистрированной страницы?Есть ли способ обновить состояние приложения, чтобы оно забыло обо всех предыдущих входах в систему?

Ответы [ 2 ]

0 голосов
/ 10 августа 2018

FWIW, у меня возникла та же проблема с Cypress, когда я работал в паре с Firebase / Firestore.После некоторых копаний я вижу, что постоянство аутентификации можно настроить.Смотрите эту статью: https://firebase.google.com/docs/auth/web/auth-state-persistence

0 голосов
/ 06 июня 2018

Cypress очищает все куки и локальное хранилище перед каждым тестом.Это говорит о том, что ваша проблема одна из следующих:

a) Вы выполняете несколько логических тестов в рамках одного теста, или

b) Тестируемая система использует другой механизм для сохранения имени входа

Если вы не выполняете a) , то вам нужно выяснить, что хранится (и где), когда пользователь входит в систему. Как только вы это знаете, вы можете написать механизм дляочистите его.

Дополнительные заметки Cypress

Одна из основных концепций Cypress заключается в том, что вам следует избегать условного тестирования.Например, в других средах обычно выполняется эквивалент ...

// Not real code
if (getelement(x).exists) {

}

Но это не Cypress-способ.

Правильный способ обработки вашего конкретного случая - выбратьодин из следующих вариантов:

  1. Перейдите по URL-адресу, который всегда будет позволять войти в ваш тест, например http://www.example.com/login/ - где даже зарегистрированные пользователи могут отправить форму входа в форму

  2. Используйте параметр запроса, чтобы сообщить серверу, что он должен очистить любое пользовательское состояние (если оно не хранится в одном из ожидаемых мест - представьте сервер, который привязывает IP-адрес к некоторому состояниюи т. д.)

  3. Встраивать данные в DOM таким образом, чтобы Cypress всегда находил их, например: <body data-logged-in="true">.Затем вы можете прочитать этот атрибут в своем тесте, поскольку он всегда там ...

Получение атрибута:

cy.get('body').should('have.attr', 'data-logged-in').then((loggedIn) => {
    // Use loggedIn here...
});
...