From b5f09ebcdbc6286b9b2a58f8478d8ab5ac36a354 Mon Sep 17 00:00:00 2001 From: Mihail Bodrov Date: Sat, 13 Jul 2019 00:04:08 +0300 Subject: [PATCH] Refactored promises to avoid possible fs stream concurrency --- .../src/__tests__/watch-file-changes.test.ts | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/jest-core/src/__tests__/watch-file-changes.test.ts b/packages/jest-core/src/__tests__/watch-file-changes.test.ts index f49f055499cf..0511bd715bc1 100644 --- a/packages/jest-core/src/__tests__/watch-file-changes.test.ts +++ b/packages/jest-core/src/__tests__/watch-file-changes.test.ts @@ -35,6 +35,8 @@ describe('Watch mode flows with changed files', () => { watch = require('../watch').default; pipe = {write: jest.fn()} as any; stdin = new MockStdin(); + rimraf.sync(cacheDirectory); + rimraf.sync(testDirectory); fs.mkdirSync(testDirectory); fs.mkdirSync(cacheDirectory); }); @@ -44,11 +46,6 @@ describe('Watch mode flows with changed files', () => { if (hasteMapInstance) { hasteMapInstance.end(); } - [fileTargetPath2, fileTargetPath].forEach(file => { - try { - fs.unlinkSync(file); - } catch (e) {} - }); rimraf.sync(cacheDirectory); rimraf.sync(testDirectory); }); @@ -109,6 +106,9 @@ describe('Watch mode flows with changed files', () => { ); const hook = new JestHook(); + const firstErrorPromise = new Promise(resolve => { + hook.getSubscriber().onTestRunComplete(resolve); + }); await watch( { ...config, @@ -121,7 +121,9 @@ describe('Watch mode flows with changed files', () => { hook, ); - await new Promise(resolve => { + await firstErrorPromise; + + const successPromise: Promise = new Promise(resolve => { hook.getSubscriber().onTestRunComplete(resolve); }); @@ -138,9 +140,7 @@ describe('Watch mode flows with changed files', () => { {encoding: 'utf-8'}, ); - const resultSuccessReport: AggregatedResult = await new Promise(resolve => { - hook.getSubscriber().onTestRunComplete(resolve); - }); + const resultSuccessReport: AggregatedResult = await successPromise; expect(resultSuccessReport).toMatchObject({ numFailedTestSuites: 0, @@ -154,12 +154,14 @@ describe('Watch mode flows with changed files', () => { failureMessage: null, }); + const errorPromise: Promise = new Promise(resolve => { + hook.getSubscriber().onTestRunComplete(resolve); + }); + // Remove again to ensure about no legacy cache fs.unlinkSync(fileTargetPath); - const resultErrorReport: AggregatedResult = await new Promise(resolve => { - hook.getSubscriber().onTestRunComplete(resolve); - }); + const resultErrorReport: AggregatedResult = await errorPromise; // After remove file we have to fail tests expect(resultErrorReport).toMatchObject({