【问题标题】:How to run same test multiple times using jest如何使用 jest 多次运行相同的测试
【发布时间】:2021-08-10 17:33:26
【问题描述】:

我正在使用 jest 来运行我的测试套件(后端为 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();
});

我正在尝试一次多次运行相同的测试,有没有办法开玩笑地使用它,或者使用其他工具。

【问题讨论】:

  • 你能把测试代码封装在一个循环中吗?
  • 是的,我尝试了 for 循环,但它会按顺序运行。我想一次运行多个测试。

标签: node.js jestjs


【解决方案1】:

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

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

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

【讨论】:

  • 在这种情况下,jest 中的一个有用标志是-o(而不是&lt;test_file&gt;)。只运行修改过的/新的测试,这样你就可以在你的测试中使用“Flakiness CI”。
【解决方案2】:

如果您不希望按顺序运行测试,可以使用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);
})

【讨论】:

    【解决方案3】:

    npx 一遍又一遍地安装软件包,如果我的更改提高了测试速度,我想计时。这不是很好,但我所做的是在package.json 中输入一个命令

    "jest": "jest <file_path> --silent"
    

    然后从布雷迪那里借来剧本

    for i in {1..100}; do yarn jest || (echo 'Failed after $i attempts' && break); done
    

    我把它包在一个计时器里,但这真的没必要。

    【讨论】:

      猜你喜欢
      • 2014-02-19
      • 2014-11-25
      • 2016-07-20
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      相关资源
      最近更新 更多