Skip to content

Drop in replacement for qunit `test` which retries a failed test.

License

Notifications You must be signed in to change notification settings

mrloop/qunit-retry

Repository files navigation

qunit-retry

Latest NPM release CI

Drop in replacement for QUnit test to retry test upon failure.

const setup = require('qunit-retry');

const retry = setup(QUnit.test);

// retry this test on failure as third party service occasionally fails
// we need to test against third party service
// we can live with occasional third party service failure
retry("a test relying on 3rd party service that occasionally fails", async function(assert) {
  var result = await occasionallyFailingServiceTestResult();
  assert.equal(result, 42);
});

It provides the same API as QUnit.test, including test.each, test.only etc. The only difference is that the test will be retried upon failure.

Use very sparingly, for a suite of 2024 tests, using this for a single acceptance test.

Blog post about qunit-retry available here.

Set Max Runs

The default maximum number of retries is 2 (one attempt and one retry). To change it globally, pass the maxRuns option to the setup function:

const setup = require('qunit-retry');

const retry = setup(QUnit.test, { maxRuns: 3 });

To change it for a single test, pass the number of retries as the third argument:

// retry this test **two times** (in addition to one initial attempt)
// on failure as third party service occasionally fails
// we need to test against third party service
// we can live with occasional third party service failure
retry("a test relying on 3rd party service that occasionally fails", async function(assert) {
  var result = await occasionallyFailingServiceTestResult();
  assert.equal(result, 42);
}, 3);

Note: It is generally advised to use the retry sparingly and this advice extends to setting a large number of retries.

Resetting environment between retries

If you need to reset the environment between retries, you can pass a beforeRetry function to the setup function:

const setup = require('qunit-retry');

const retry = setup(QUnit.test, { beforeRetry: () => resetEnvironment() });

Install

npm

npm install --save-dev qunit-retry

or using yarn:

yarn add --dev qunit-retry

or using pnpm:

pnpm add --save-dev qunit-retry

Node

const setup = require('qunit-retry');

const retry = setup(QUnit.test);

Directly in browser

<script src="//code.jquery.com/qunit/qunit-2.9.3.js"></script>

<script type="module">
  import setup from 'https://unpkg.com/qunit-retry/main.js'

  const retry = setup(QUnit.test)

  retry("a test relying on 3rd party service that occasionally fails", async function(assert) {
    var result = await occasionallyFailingServiceTestResult();
    assert.equal(result, 42);
  });
</script>

Contributing

How to Run Tests

pnpm test

How to Run Linting

pnpm lint

License

qunit-retry is developed by and © mrloop and contributors. It is released under the ISC License.