Javascript 如何在运行测试之前登录和注销用户
在Cypress中,我试图在后端测试一些东西。我真的很难控制用户是否登录 在开发特性时,我正在尝试自动化我所做的所有测试。我花了很多时间和精力来控制用户是否登录 我正在寻找执行以下操作的命令:Javascript 如何在运行测试之前登录和注销用户,javascript,cypress,Javascript,Cypress,在Cypress中,我试图在后端测试一些东西。我真的很难控制用户是否登录 在开发特性时,我正在尝试自动化我所做的所有测试。我花了很多时间和精力来控制用户是否登录 我正在寻找执行以下操作的命令: 在开始任何测试时,注销任何用户(如果已登录) 执行以下操作的快速方法:cy.login('foo@example.org“,”密码“) 由于这将必须在许多测试之前运行,因此最好简化它 它被用于Laravel/Vue应用程序(因此是CSRF令牌) 我目前的尝试: Cypress.Commands.add(“
cy.login('foo@example.org“,”密码“)
Cypress.Commands.add(“登录用户”、(电子邮件、密码)=>{
cy.server();
//资料来源:https://github.com/cypress-io/cypress/issues/413
sessionStorage.clear();
cy.clearCookies();
cy.clearLocalStorage();
cy.window()。然后((win)=>{
win.sessionStorage.clear()
});
cy.visit(Cypress.env('baseUrl')+“/login”);
cy.location()应((loc)=>{
expect(loc.pathname).to.eq(“/login”)
});
cy.get(“头元[name=csrf令牌]”)
.然后((元)=>{
const csrf=meta[0]。内容;
赛义德请求({
方法:“POST”,
url:“/login”,
正文:{
_令牌:csrf,
电邮:电邮,,
密码:密码
}
});
});
cy.visit(Cypress.env('baseUrl')+“/login”);
});
这方面的问题是:
- 出于某种奇怪的原因。。。每秒钟,用户都会保持从上一个会话登录的状态。但是如果发生这种情况,我只需要再次运行它,然后用户就注销了。它快把我逼疯了
- 它不慢,但也不快(考虑到我做了无数次)。因此,如果它可以做得更快(页面加载更少),那么它将是非常棒的
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 = {};
});
我试过这个,但没有其他结果。不过谢谢你的参与。