From 9e8e9ddbf1a0af459235136ad14ca98269fa1755 Mon Sep 17 00:00:00 2001 From: Jason Palmer Date: Fri, 1 Mar 2019 13:42:22 -0500 Subject: [PATCH] Fix test retries that contain snapshots --- packages/expect/src/types.ts | 1 + packages/jest-circus/src/eventHandler.ts | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/packages/expect/src/types.ts b/packages/expect/src/types.ts index 106abcb03995..469d63b7e5be 100644 --- a/packages/expect/src/types.ts +++ b/packages/expect/src/types.ts @@ -44,6 +44,7 @@ export type MatcherState = { isExpectingAssertions?: boolean; isNot: boolean; promise: string; + snapshotState: any; suppressedErrors: Array; testPath?: Config.Path; utils: typeof jestMatcherUtils & { diff --git a/packages/jest-circus/src/eventHandler.ts b/packages/jest-circus/src/eventHandler.ts index a29b69828d7b..91fd1a557ff3 100644 --- a/packages/jest-circus/src/eventHandler.ts +++ b/packages/jest-circus/src/eventHandler.ts @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +import fs from 'fs'; + import {EventHandler, TEST_TIMEOUT_SYMBOL} from './types'; import { @@ -147,7 +149,29 @@ const eventHandler: EventHandler = (event, state): void => { break; } case 'test_retry': { + // Clear errors so tests can be retried (and not immediately fail) event.test.errors = []; + + // Clear any snapshot data that occurred in previous test run + const tmpSnapshotState = global.expect.getState().snapshotState; + + if (tmpSnapshotState) { + if ( + tmpSnapshotState._snapshotPath && + fs.existsSync(tmpSnapshotState._snapshotPath) + ) { + fs.unlinkSync(tmpSnapshotState._snapshotPath); + } + global.expect.getState().snapshotState._snapshotData = {}; + global.expect.getState().snapshotState._inlineSnapshots = []; + global.expect.getState().snapshotState._counters = new Map([]); + global.expect.getState().snapshotState._index = 0; + global.expect.getState().snapshotState.added = 0; + global.expect.getState().snapshotState.matched = 0; + global.expect.getState().snapshotState.unmatched = 0; + global.expect.getState().snapshotState.updated = 0; + } + break; } case 'run_start': {