如何使用Jest多次运行相同的测试

Dam*_*rhk 5 node.js jestjs

我正在开玩笑地运行我的测试套件(后端为Node.js和express)。下面是我的代码:

Const puppeteer = require ('puppeteer');

Test ('testing login function', async () => {
    const browser = await puppeteer.launch ({  
        headless: true,
        args: ['--no-sandbox']
  });

    const page = await browser.newPage();

    await page.type('#username', 'admin');
    await page.type('#password', 'password');

    await page.click('login-button');

    await page.waitFor('.card');

    expect(texthead).toEqual('Welcome to webpage');

    await browser.close();
});
Run Code Online (Sandbox Code Playgroud)

我试图一次运行同一测试多次,是否有jestjs使用它的方法,或者也许使用其他工具。

Bra*_*ing 16

如果您正在寻找基本上可以对单个测试进行压力测试的东西(像我一样寻找测试的脆弱性),那么您可以在终端中使用以下单行代码,当然,它同时使用 bash 和 Jest。

for i in {1..100}; do npx jest <test_file> --silent || (echo 'Failed after $i attempts' && break); done
Run Code Online (Sandbox Code Playgroud)

此特定命令要求您已npx安装并使用该--silent选项,但您可以随意更改它。

  • 当以失败的测试运行此测试时,我得到以下打印的“Failed after $i attempts bash:break: only在‘for’、‘while’或‘until’循环中有意义”,并且循环不会中断。另一种选择是 `for i in {1..100}; do npx jest &lt;test_file&gt; --silent; 如果[[“$?” != 0]]; 然后 echo "$i 尝试后失败" &amp;&amp; break; 菲;完成`。需要双引号来插入 $i (4认同)

小智 9

Jest 有一个内置方法可以使用.each(). https://jestjs.io/docs/api#testeachtablename-fn-timeout

如果要更改每个测试的参数,可以将测试参数数组传递给.each([1,2,3]). 如果不需要,只需用 null 填充数组即可。

test.each(Array(100).fill(null))('may be flaky test', async () => {})

这可以选择并行运行.concurrent test.concurrent.each(Array(100).fill(null))('may be flaky test', async () => {})


Her*_*kov 5

如果您不想按顺序运行测试,则可以使用Promise.all. 这是一个关于如何重构代码的快速示例。

const runTheTest = async () => { 
  const browser = await puppeteer.launch ({
    headless: true, args: ['--no-sandbox'] 
  });
  .......
  return browser.close();
}

test('testing login function', async () => { 
  const testRuns = []
  for (let index = 0; index < NUMBER_OF_RUNS; index++) {
    testRuns.push(runTheTest())
  }
  return Promise.all(testRuns);
})
Run Code Online (Sandbox Code Playgroud)