javascript 如何使用Cypress自定义命令递增和返回用于字段输入的JSON文件的内容

ie3xauqp  于 2023-05-21  发布在  Java
关注(0)|答案(2)|浏览(103)

我需要一些帮助来解释cypress中的自定义命令是如何工作的。我目前正在编写一个函数,它读取一个json文件,并将内容递增1,并希望将其返回到测试规范,以便可以将其输入到字段中。注意 * JS和Cypress的新特性
下面是commands.ts中的代码:

Cypress.Commands.add('newUser', () => {
    cy.readFile('cypress/fixtures/users.js
    const oldUser = user.user;
    cy.log(typeof oldUser);
    // Getting old number from user
    const reg = /\d+/gm;
    let oldNum = oldUser.match(reg);
    cy.log(oldNum);
    oldNum = toInteger(oldNum);
    cy.log(typeof oldNum);
    // New number for user
    const newNum = oldNum + 1;
    cy.log(newNum.toString());
    let newUser = oldUser.split(reg);
    cy.log(newUser);
    // Add to a specified location
    newUser.splice(1, 0, newNum);
    cy.log(newUser);
    newUser = newUser.join('');
    // cy.log(newUser);
    cy.writeFile('cypress/fixtures/users.json', { user: newUser });
    return newUser;
  });
});

我尝试在spec文件中使用它,如下所示:

const newUser = cy.newUser();
    cy.log(newUser);
    cy.get('[data-cy="email_field"]').type(newUser);

我认为我的问题的一部分是不完全理解如何'链接'与Cypress和自定义命令的大多数例子显示它使用或操纵DOM中的东西,但似乎我更想写一个助手函数,我会想在其他测试中重用...
任何指导都非常感谢
我试过使用'wrap'和'then',但我不认为我有正确的顺序(可能是由于没有完全理解JS)

7xzttuei

7xzttuei1#

正确的方法是使用回调函数来链接代码,就像这样:

cy.newUser().then(newUser => {
  cy.log(newUser)
  cy.get('[data-cy="email_field"]').type(newUser)
})

我不能告诉如果你的自定义命令本身是正确的,这是一个真实的的混乱。请考虑在您的问题中张贴更整洁的代码。

zzzyeukh

zzzyeukh2#

谢谢你的帮助!我能够通过以下方式使其工作:

Cypress.Commands.add('newUser', () => {
  return cy.readFile('cypress/fixtures/users.json').then((user) => {
    const oldUser = user.user;
    const reg = /\d+/gm;
    let oldNum = oldUser.match(reg);
    oldNum = toInteger(oldNum);
    const newNum = oldNum + 1;
    let newUser = oldUser.split(reg);
    newUser.splice(1, 0, newNum);
    newUser = newUser.join('');
    cy.writeFile('cypress/fixtures/users.json', { user: newUser }).then(() => {
      return cy.wrap(newUser);
    });
  });
});
it('Test 3 - Check password requirments', () => {
    // Write new user to Fixtures for further tests
    cy.newUser().then((newUser) => {
      // cy.log(newUser);
      cy.get('[data-cy="email_field"]').type(newUser);
    });
  });

相关问题