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

Jas*_*Jas 1 javascript e2e-testing cypress

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

        function generate_random_string(string_length) { // A function that creates a random string and will later pass this to a variable
            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)
Run Code Online (Sandbox Code Playgroud)

对于不同情况的其他测试文件,此随机字符串生成器有很多用途。无需每次都复制和粘贴此函数,我想重用此函数并在另一个测试文件中调用它。

我应该如何设置?

我试图在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
})
Run Code Online (Sandbox Code Playgroud)

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

   cy.get('#name').click()
   cy.get('#name').random_string_gen()
Run Code Online (Sandbox Code Playgroud)

我想在一个文件内重用该函数,然后在另一个文件内调用它,但是我不确定如何设置必要的命令/索引JS文件,因此让我入门的模板真的很有帮助!

Dio*_*cha 5

只需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
 });
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

// Output: eauyy
Run Code Online (Sandbox Code Playgroud)