Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
e2e retry blog post - initial retry script
// run_tests_with_retries.js
import { runCLI } from 'jest';
import jestConfig from './jest.config';
const NUM_RETRIES = 3;
async function runTestsAndRetry(jestConfig, retriesRemaining) {
const { results } = await runCLI(jestConfig, ['e2e/test']);
// If there were no failures or we're out of retries, return
if (!results.numFailedTests && !results.numFailedTestSuites) {
return Promise.resolve();
}
if (retriesRemaining === 1) {
return Promise.reject(new Error('Out of retries. Some tests are still failing.'));
}
// Compile a list of the test suites that failed and tell Jest to only run those files next time
const failedTestPaths = results.testResults
.filter((testResult) => testResult.numFailingTests > 0 || testResult.failureMessage)
.map((testResult) => testResult.testFilePath);
jestConfig.testMatch = failedTestsPaths;
// Decrement retries remaining and retry
retriesRemaining = retriesRemaining - 1;
console.log(`Retrying failed tests. ${retriesRemaining} attempts remaining.`);
return await runTestsAndRetry(jestConfig, retriesRemaining);
}
runTestsAndRetry(jestConfig, NUM_RETRIES);
@abhidp
Copy link

abhidp commented Dec 8, 2022

Have you even compiled this code?
what is failedTestsPaths ?

@aeaston
Copy link
Author

aeaston commented Jan 12, 2023

Yes, we use this code in production many times a day. For more information, you can see the corresponding blog post here: https://eng.wealthfront.com/2022/04/21/retrying-e2e-test-suites-with-jest/

@abhidp
Copy link

abhidp commented Jan 13, 2023

You did not get my question.
The above piece of code will not compile at all.
failedTestsPaths is an undefined variable. It should be failedTestPaths not failedTestsPaths (look for the plural in Test(s))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment