Javascript io在自定义登录命令中发出异步请求
我想配置一个自定义的Javascript io在自定义登录命令中发出异步请求,javascript,testing,promise,async-await,cypress,Javascript,Testing,Promise,Async Await,Cypress,我想配置一个自定义的login命令,在该命令中,我必须进行一个返回承诺的登录调用 commands.js: Cypress.Commands.add("login", () => { AuthLib.signIn(username, password).then((data) => { cy.setLocalStorage("accessToken", data.accessToken); }); AuthLib.signIn
login
命令,在该命令中,我必须进行一个返回承诺的登录调用
commands.js
:
Cypress.Commands.add("login", () => {
AuthLib.signIn(username, password).then((data) => {
cy.setLocalStorage("accessToken", data.accessToken);
});
AuthLib.signIn()
返回一个承诺
然后我想在之前的块中使用此命令:
before(() => {
cy.login();
cy.saveLocalStorage();
});
我注意到这个承诺没有得到解决。
“黑客”修复方法是在login()
和saveLocalStorage()之间添加cy.wait(4000)
。
但是这使得我的测试依赖于auth服务器的加载时间
我发现了这个“相关”问题:在哪里引用。但此库不能在每个
之前的或之前的中使用
如何等待从login()
/返回的承诺?在执行cy.saveLocalStorage()
之前,请确保从login()
返回的承诺已得到解决
更新
我添加了在以下情况下有效和无效的示例:
解决方案是从cy开始。然后()
:
确保在Cypress.Commands.add
callback中返回该承诺。
在Cypress上下文中处理承诺有点混乱,因为许多异步行为都是在cy.命令中神奇地处理的
Cypress.Commands.add("login", () => {
return AuthLib.signIn(username, password).then((data) => {
cy.setLocalStorage("accessToken", data.accessToken);
});
});
其他解决方案:
Cypress.Commands.add("login", () => {
return AuthLib.signIn(username, password);
});
before(() => {
cy.login();
cy.setLocalStorage("accessToken", data.accessToken);
});
确保在Cypress.Commands.add
callback中返回该承诺。
在Cypress上下文中处理承诺有点混乱,因为许多异步行为都是在cy.命令中神奇地处理的
Cypress.Commands.add("login", () => {
return AuthLib.signIn(username, password).then((data) => {
cy.setLocalStorage("accessToken", data.accessToken);
});
});
其他解决方案:
Cypress.Commands.add("login", () => {
return AuthLib.signIn(username, password);
});
before(() => {
cy.login();
cy.setLocalStorage("accessToken", data.accessToken);
});
在before
块中,我是否应该等待登录:wait login()
?在async之前调用make并调用wait cy.login()
或者只调用cy.login()
使测试在before
函数中保持挂起。嗯,有趣的cy.login()
应该可以工作。在原始答案的基础上添加了其他解决方案。我感觉一个人无法从Cypress命令中返回承诺。除非它被包装在cy.then()
中。这是我让它工作的唯一方法(见有问题的更新)。我尝试了你的建议,但Cypress仍然坚持承诺。在before
块中,我是否应该等待登录:wait login()
?在async之前调用making并调用wait cy.login()
或只是调用cy.login())
使测试在函数之前一直挂起。Hmmmm,有趣的cy.login()
应该可以工作。在原始答案的基础上添加了其他解决方案。我感觉一个人无法从Cypress命令中返回承诺。除非它被包装在cy.then()
中。这是我让它工作的唯一方法(见有问题的更新)。我试过你的建议,但赛普拉斯仍然信守诺言。