xtr*_*tra 6 javascript testing promise async-await cypress
我想配置一个自定义login命令,在其中我必须进行一个返回承诺的登录调用。
commands.js:
Cypress.Commands.add("login", () => {
AuthLib.signIn(username, password).then((data) => {
cy.setLocalStorage("accessToken", data.accessToken);
});
Run Code Online (Sandbox Code Playgroud)
AuthLib.signIn()返回一个承诺。
然后我想在块中使用这个命令before:
before(() => {
cy.login();
cy.saveLocalStorage();
});
Run Code Online (Sandbox Code Playgroud)
我注意到承诺没有得到解决。一个“hacky”修复方法是在和cy.wait(4000)之间添加。但这使得我的测试取决于身份验证服务器的加载时间login()saveLocalStorage()
我发现了这个“相关”问题:Cypress.io 如何处理异步代码,其中引用了https://www.npmjs.com/package/cypress-promise 。但这个库不能用于before或beforeEach
我如何等待返回的承诺/确保在执行之前解决login()承诺?login()cy.saveLocalStorage()
更新
我添加了哪些有效和无效的示例:https://github.com/Nxtra/Cypress-Amplify-Auth-Example/blob/main/cypress/support/commands.js
解决方案是从以下开始cy.then():
Cypress.Commands.add("login", () => {
cy.then(() => AuthLib.signIn(username, password)).then((data) => {
cy.setLocalStorage("accessToken", data.accessToken);
});
Run Code Online (Sandbox Code Playgroud)
确保您在Cypress.Commands.add回调中返回该承诺。在 Cypress 上下文中处理 Promise 有点令人困惑,因为很多异步行为都是在 cy 中神奇地处理的。命令。
Cypress.Commands.add("login", () => {
return AuthLib.signIn(username, password).then((data) => {
cy.setLocalStorage("accessToken", data.accessToken);
});
});
Run Code Online (Sandbox Code Playgroud)
其他解决方案:
Cypress.Commands.add("login", () => {
return AuthLib.signIn(username, password);
});
before(() => {
cy.login();
cy.setLocalStorage("accessToken", data.accessToken);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3555 次 |
| 最近记录: |