Automated tests 如何在promise之外使用Cypress夹具数据';s then()块
我正在测试Cypress,我有以下代码: 如果在没有任何参数的情况下调用Automated tests 如何在promise之外使用Cypress夹具数据';s then()块,automated-tests,cypress,Automated Tests,Cypress,我正在测试Cypress,我有以下代码: 如果在没有任何参数的情况下调用cy.login(),则user和password将在If块中分配。否则,它将使用传递的参数值 我尝试在此处添加装置,并得出以下代码: Cypress.Commands.add('login', (user, password) => { if (!user || !password) { cy.fixture('users').then((json) => { var user, p
cy.login()
,则user
和password
将在If
块中分配。否则,它将使用传递的参数值
我尝试在此处添加装置,并得出以下代码:
Cypress.Commands.add('login', (user, password) => {
if (!user || !password) {
cy.fixture('users').then((json) => {
var user, password;
user = json[0].email;
password = json[0].password;
login2(user,password);
});
} else {
login2(user, password);
}
function login2(user, password) {
cy.visit('');
cy.contains('Entrar').click();
cy.get('input[name=_username]')
.type(user);
cy.get('input[name=_password]')
.type(password);
cy.get('.btn').click();
}
});
当我设置user=json[0]。email
时,它的值正好在中。然后,
所以我创建了login函数来解决这个问题
我想有更好的办法。有什么想法吗?Cypress文档提供了使用的指导。最值得注意的是,它建议如下:
返回值
不能指定或使用任何Cypress命令的返回值。命令排队并异步运行
文档接着解释了.then()
块中命令的使用和嵌套。利用cypress/support/commands.js中的这种方法,您可以像这样简化代码:
Cypress.Commands.add("login", (user, pw) => {
let username;
let password;
cy.fixture('default-user') // <-- fixture in a separate file, default-user.js
.then((defaultUser) => {
username = user || defaultUser.username;
password = pw || defaultUser.password;
cy.get('input[name=_username]').type(username);
cy.get('input[name=_password]').type(password);
cy.get('.btn').click();
});
});
{
username: 'user@test.com.br',
password: '123321'
}
和上的Cypress文档有助于理解不同Cypress上下文和用例中引用值的细微差别。请向我们展示您使用login2的代码,否则很难提供任何意见,login2是最后一个函数,mistype
{
username: 'user@test.com.br',
password: '123321'
}