Patch `beforeAll` and `afterAll` hooks to work with `jest.retryTimes`.
npm install jest-retry-all-hooksPatch beforeAll and afterAll hooks to work with jest.retryTimes.
``js
jest.retryTimes(1);
beforeAll(() => {
// This is a part of a root or a nested describe block, and it is not retried normally.
});
test('test', () => {
// The tests and their beforeEach and afterEach hooks are retried.
});
afterAll(() => {
// This is a part of a root or a nested describe block, and it is not retried normally.
});
`
So, what does this library do? It converts beforeAll and afterAll hooks tobeforeEach
smart and afterEach hooks, which usually run only once, but
if a test fails with an error, here is what happens:
`js
jest.retryTimes(1);
beforeEach(() => {
// if never ran before, run a function passed to beforeAll
// if previous test failed, run that function again
});
test('test', () => {
// The behavior test, beforeEach, afterEach stays the same.
});
afterEach(() => {
// if the test function or preceeding hooks failed, run a function passed to afterAll
});
afterAll(() => {
// if never ran before, run a function passed to afterAll`
});
See the __tests__/hooks.ts for an elaborate example
of how it works:
`plain`
B b -1 a A
B b -2 a A
B b 3 a
b 1 a
b -2 a A
B b 2 a A
The example above demonstrates how jest.retryTimes(2) will work with thebeforeAll
patched (B), beforeEach (b), afterEach (a), and afterAll (A) hooks and
flaky tests (1, 2, 3), where negative numbers indicate failures, and positive
numbers indicate successes.
Please note that the patched beforeAll and afterAll hooks won't be associated withafterAll
describe blocks, so they will be executed whenever a test fails, even if the
hook seems to be outside the describe block.
Install the package:
`sh`
npm install --save-dev jest-retry-all-hooks
Add to your jest.config.js:
`diff`
- testEnvironment: 'node',
+ testEnvironment: 'jest-environment-emit/node',
+ testEnvironmentOptions: {
+ eventListeners: [
+ 'jest-retry-all-hooks',
+ ],
+ },
If you don't have jest-enviroment-emit installed, you can install it:
`sh`
npm install --save-dev jest-environment-emit
You can also use any other test environment compatible with jest-environment-emit`, e.g.:
- jest-environment-emit/jsdom
- jest-metadata/environment-node
- jest-metadata/environment-jsdom
- jest-allure2-reporter/environment-node
- jest-allure2-reporter/environment-jsdom
- detox/runners/jest/testEnvironment
Use GitHub Topic Search to find more compatible test environments.
Licensed under the MIT License.