jest-retry-all-hooks
Patch beforeAll and afterAll hooks to work with jest.retryTimes.
Motivation
jest.retryTimes(1);
beforeAll(() => {
});
test('test', () => {
});
afterAll(() => {
});
So, what does this library do? It converts beforeAll and afterAll hooks to
smart beforeEach and afterEach hooks, which usually run only once, but
if a test fails with an error, here is what happens:
jest.retryTimes(1);
beforeEach(() => {
});
test('test', () => {
});
afterEach(() => {
});
afterAll(() => {
});
See the tests/hooks.ts for an elaborate example
of how it works:
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 the
patched beforeAll (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 with
describe blocks, so they will be executed whenever a test fails, even if the afterAll
hook seems to be outside the describe block.
Installation
Install the package:
npm install --save-dev jest-retry-all-hooks
Add to your jest.config.js:
- 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:
npm install --save-dev jest-environment-emit
You can also use any other test environment compatible with jest-environment-emit, e.g.:
Use GitHub Topic Search to find more compatible test environments.
License
Licensed under the MIT License.