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

时间:2019-02-06 17:14:53

标签: 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)

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

我应该如何设置?

我试图在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()

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

1 个答案:

答案 0 :(得分:3)

只需在您的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('stackoverflow', () => {
  it('stackoverflow', () => {
    cy.generate_random_string(5).then((result) => {
      console.log(result);
    });
  })
})

// Output: eauyy