В Cypress пытаюсь что-то протестировать в бэкэнде. Я действительно изо всех сил пытаюсь контролировать, вошел ли пользователь в систему или нет.
Я пытаюсь автоматизировать все тесты, которые я выполняю при разработке функций. Я трачу так много времени и усилий, чтобы контролировать, вошел ли пользователь в систему или нет.
Я ищу команду, которая делает это:
- Выход любого пользователя (если он находится в системе) при запуске любого теста.
- Быстрый способ сделать что-то вроде:
cy.loginUser( 'foo@example.org', 'password' )
?
Так как это должно будет выполняться перед многими тестами, если было бы неплохо его упростить.
Он используется в приложении Laravel / Vue (отсюда и CSRF-токен).
Моя текущая попытка:
Cypress.Commands.add( "loginUser", ( email, password ) => {
cy.server();
// Source: https://github.com/cypress-io/cypress/issues/413
sessionStorage.clear();
cy.clearCookies();
cy.clearLocalStorage();
cy.window().then((win) => {
win.sessionStorage.clear()
});
cy.visit( Cypress.env( 'baseUrl' ) + "/login");
cy.location().should((loc) => {
expect(loc.pathname).to.eq('/login')
});
cy.get("head meta[name=csrf-token]")
.then((meta) => {
const csrf = meta[0].content;
cy.request({
method: 'POST',
url: '/login',
body: {
_token: csrf,
email: email,
password: password
}
});
});
cy.visit( Cypress.env( 'baseUrl' ) + "/login");
});
Проблемы с этим:
- По какой-то странной причине ... Каждый второй раз пользователь остается в системе с предыдущего сеанса. Но если это произойдет, мне просто придется запустить его снова, и тогда пользователь выйдет из системы. Это сводит меня с ума.
- Это не медленно, но и не быстро (учитывая, что я делаю это бесчисленное количество раз). Так что, если бы это можно было сделать быстрее (с меньшим количеством загрузок страниц), это было бы потрясающе.