我有一个自定义命令,我想覆盖 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));
})
编辑/更新
我在 Auth.signIn() 调用中添加了 async/await,这使得执行等待该方法完成,但如果达到 4 秒的默认超时,则会导致测试失败。
我能做的最好的事情就是将所有测试代码包含在 login
命令的 then
中。
it('Test that requires login', () => {
cy.login().then(function (){
cy.visit('/');
//...
});
})
虽然测试会等待登录操作完成,但如果在登录之前达到超时,则测试会失败。
最佳答案
我不确定 Cypress 的 custom commands 中的超时
,但您可以通过传递 default param 来使用解决方法进入您的自定义命令,如下所示:
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));
})
注意:请注意传递超时
或任意等待x
秒 is not considered good practice 。您应该检查响应的状态
并断言它返回200
状态或使用 route aliases .
示例:
......
.then(response => {
if (response.status !== 200) {
cy.log('An error happened while logging in');
}
关于javascript - Cypress:为自定义命令设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64894285/