在赛普拉斯中,我正在尝试在后端进行测试。我真的很难控制用户是否已登录。
在开发功能时,我正在尝试自动化我所做的所有测试。我花了很多时间和精力来控制用户是否登录。
我正在寻找执行此操作的命令
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");
});
问题所在:
答案 0 :(得分:0)
尝试使用另一种方式清除localStorage。例如,我正在使用这些命令来保存,还原和清除存储,并且运行良好。我将这些用于登录/注销。
let LOCAL_STORAGE_MEMORY = {};
Cypress.Commands.add("saveLocalStorage", () => {
Object.keys(localStorage).forEach(key => {
LOCAL_STORAGE_MEMORY[key] = localStorage[key];
});
});
Cypress.Commands.add("restoreLocalStorage", () => {
Object.keys(LOCAL_STORAGE_MEMORY).forEach(key => {
localStorage.setItem(key, LOCAL_STORAGE_MEMORY[key]);
});
});
Cypress.Commands.add("clearLocalStorageCache", () => {
localStorage.clear();
LOCAL_STORAGE_MEMORY = {};
});