如何重用现有赛普拉斯测试中的函数,并在新测试中调用它?

How to reuse a function from an existing Cypress test, and call it in a new one?

我有以下函数,它在父函数中。

// A function that creates a random string and will later pass this to a variable
function generate_random_string(string_length) {
    let random_string = '';
    let random_ascii;
    for(let i = 0; i < string_length; i++) {
        random_ascii = Math.floor((Math.random() * 25) + 97);
        random_string += String.fromCharCode(random_ascii)
    }
    return random_string
}

var random_string = generate_random_string(6)

这个随机字符串生成器在不同场景的其他测试文件中有很多用途。我不想每次都复制和粘贴这个函数,而是想重用这个函数并在另一个测试文件中调用它。

我该如何设置?

我尝试在 commands.js 文件中创建自定义命令,如下所示:

Cypress.Commands.add("random_string_gen", 
    function generate_random_string(string_length) {
      let random_string = '';
      let random_ascii;
      for(let i = 0; i < string_length; i++) {
          random_ascii = Math.floor((Math.random() * 25) + 97);
        random_string += String.fromCharCode(random_ascii)
      }
      return random_string
})

但是当我在我的测试文件中调用它时,这不起作用:

cy.get('#name').click()
cy.get('#name').random_string_gen()

我想在一个文件中重用该函数,并在另一个文件中调用它,但我不确定如何设置必要的 command/index JS 文件,所以一个让我入门的模板真的很棒有帮助!

只需在 cypress/support/commands.js 上创建自定义命令,如下所示:

Cypress.Commands.add('generate_random_string', (string_length) => { 
  let random_string = '';
  let random_ascii;
  for(let i = 0; i < string_length; i++) {
      random_ascii = Math.floor((Math.random() * 25) + 97);
      random_string += String.fromCharCode(random_ascii)
  }
  return random_string
 });

然后,在您的测试规范文件中,您可以调用 cy.generate_random_string(5)

例如,这将向控制台打印一个随机生成的长度为 5 的字符串。

/// <reference types="Cypress" />

context('Whosebug', () => {
  it('Whosebug', () => {
    cy.generate_random_string(5).then((result) => {
      console.log(result);
    });
  })
})

// Output: eauyy