【发布时间】:2021-05-05 19:35:52
【问题描述】:
我正在覆盖访问命令以在需要身份验证的 QA 环境中运行测试。大多数时候它工作正常,但有时它会失败
cy.then() 等待 4000 毫秒后超时。
您的回调函数返回了一个从未解决的承诺。
我的功能是:
Cypress.Commands.overwrite("visit", (originalFn, url, options) => {
// Read the auth details from accounts.json
cy.fixture("accounts").then((account) => {
const username = account.auth_username;
const password = account.auth_password;
const authenticatedOptions = {
...options,
auth: { username, password },
failOnStatusCode: false,
};
return originalFn(url, authenticatedOptions);
});
});
我做错了什么让它变得脆弱吗?
【问题讨论】:
-
这个函数的目的是什么?它正在返回
originalFn的结果,但是cy.fixture返回值没有被使用? -
authenticatedOptions 被传递给 originalFN,它包含站点在您访问它时要求的身份验证用户名和密码。 docs.cypress.io/api/commands/visit#Add-basic-auth-headers 它正在这样做,但不是在每次调用 visit 时都将其传递,而是覆盖了函数以自动完成
-
赛普拉斯如何知道承诺何时完成?这可能就是超时的原因
-
我不确定,根据文件,它在调用 .fixture docs.cypress.io/api/commands/fixture#Timeouts时永远不会超时
-
看起来阴暗的是你从
.then()回调中return,但你没有从overwrite回调中返回那个承诺,所以visit不会知道它应该等待夹具。
标签: javascript authentication cypress