javascript - 赛普拉斯:将超时设置为自定义命令
问题描述
我有一个自定义命令,我想覆盖 4 秒的默认超时。我尝试在命令的代码和使用它的测试中设置超时,但还没有成功。
Cypress.Commands.add("login", () => {
Auth.signIn(username, password)
.then(() => {
console.log('Programmatically logged in as ' + username);
})
.catch(err => console.log('Error when login in: ', err));
})
我尝试了以下操作:
Cypress.Commands.add("login", { timeout : 10000} () => {...}
和
Cypress.Commands.add("login", () => {
Auth.signIn(username, password)
.then(({ timeout : 10000}) => {
console.log('Programmatically logged in as ' + username);
})
.catch(err => console.log('Error when login in: ', err));
})
编辑/更新
我在调用中添加了 async/await,Auth.signIn()
这使得执行等待该方法完成,但如果它达到 4 秒默认超时,它会使测试失败。我能做的最好的then
就是在login
命令中包含所有测试代码。
it('Test that requires login', () => {
cy.login().then(function (){
cy.visit('/');
//...
});
})
虽然测试等待登录操作完成,但如果在登录之前达到超时,则测试失败。
解决方案
我不确定timeout
赛普拉斯的自定义命令,但您可以通过将默认参数传递给您的自定义命令来使用解决方法,如下所示:
Cypress.Commands.add("login", (waitTimer = 1000) => {
Auth.signIn(username, password)
.then(() => {
cy.wait(waitTimer);
console.log('Programmatically logged in as ' + username);
})
.catch(err => console.log('Error when login in: ', err));
})
注意:请注意,通过timeouts
或任意等待x
几秒钟不被认为是好的做法。您应该检查response's status
& 断言它返回一个200
状态或使用路由别名。
例子:
......
.then(response => {
if (response.status !== 200) {
cy.log('An error happened while logging in');
}
推荐阅读
- python - 我可以将值与字符串一起附加到输出文本文件吗?
- matlab - 我如何计算数据信号曲线的斜率
- angular - 注入到组件的服务在构造函数之外未定义
- agens-graph - 如何在 AgnsGraph 上的第一个 CYPHER 语句中使用 with 子句?
- c# - 为什么它给我一个 NullReferenceException 但没有错误
- javascript - Google Maps JavaScript API 错误 您要授权的站点 URL:
- google-app-engine - 通过 Cloud Scheduler 使用管理 API 方法
- python - 如何从 Python 中的 CSV 文件中删除空双引号?
- php - 从 MySQL 数据库中删除,表单不会在 PHP 中显示
- terraform - 如何更改 Compute Engine 虚拟机中的 StackDriver 日志记录代理配置?