From d56dcf37d5c4216cf89bbe2d8735f4e633d61403 Mon Sep 17 00:00:00 2001 From: Emilien Muraton Date: Thu, 26 Jul 2018 10:00:47 +0100 Subject: [PATCH 1/3] stop search if is undefined --- .../src/crawlers/__tests__/node.test.js | 18 ++++++++++++++++++ packages/jest-haste-map/src/crawlers/node.js | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/jest-haste-map/src/crawlers/__tests__/node.test.js b/packages/jest-haste-map/src/crawlers/__tests__/node.test.js index 64362a1d0515..7734a04b143e 100644 --- a/packages/jest-haste-map/src/crawlers/__tests__/node.test.js +++ b/packages/jest-haste-map/src/crawlers/__tests__/node.test.js @@ -59,6 +59,8 @@ jest.mock('fs', () => { setTimeout(() => callback(null, ['directory', 'tomato.js']), 0); } else if (dir === '/fruits/directory') { setTimeout(() => callback(null, ['strawberry.js']), 0); + } else if (dir == '/empty') { + setTimeout(() => callback(null, null), 0); } }), stat: jest.fn(stat), @@ -217,4 +219,20 @@ describe('node crawler', () => { expect(data.files).toEqual({}); }); }); + + it('completes with undefined names', () => { + process.platform = 'win32'; + + nodeCrawl = require('../node'); + + const files = Object.create(null); + return nodeCrawl({ + data: {files}, + extensions: ['js'], + ignore: pearMatcher, + roots: ['/empty'], + }).then(data => { + expect(data.files).toEqual({}); + }); + }); }); diff --git a/packages/jest-haste-map/src/crawlers/node.js b/packages/jest-haste-map/src/crawlers/node.js index 17ce3452e757..004dd46f23a1 100644 --- a/packages/jest-haste-map/src/crawlers/node.js +++ b/packages/jest-haste-map/src/crawlers/node.js @@ -30,7 +30,10 @@ function find( activeCalls++; fs.readdir(directory, (err, names) => { activeCalls--; - + if (!names) { + callback(result); + return; + } names.forEach(file => { file = path.join(directory, file); if (ignore(file)) { From 0f79b065bcee2581d0e7f80bdceb3e4f7d0c4674 Mon Sep 17 00:00:00 2001 From: Emilien Muraton Date: Fri, 24 Aug 2018 15:07:57 +0100 Subject: [PATCH 2/3] fix: callback early is readdir throw an error --- .../jest-haste-map/src/crawlers/__tests__/node.test.js | 8 ++++---- packages/jest-haste-map/src/crawlers/node.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/jest-haste-map/src/crawlers/__tests__/node.test.js b/packages/jest-haste-map/src/crawlers/__tests__/node.test.js index 7734a04b143e..599075bb3269 100644 --- a/packages/jest-haste-map/src/crawlers/__tests__/node.test.js +++ b/packages/jest-haste-map/src/crawlers/__tests__/node.test.js @@ -59,8 +59,8 @@ jest.mock('fs', () => { setTimeout(() => callback(null, ['directory', 'tomato.js']), 0); } else if (dir === '/fruits/directory') { setTimeout(() => callback(null, ['strawberry.js']), 0); - } else if (dir == '/empty') { - setTimeout(() => callback(null, null), 0); + } else if (dir == '/error') { + setTimeout(() => callback({code: 'ENOTDIR'}, undefined), 0); } }), stat: jest.fn(stat), @@ -220,7 +220,7 @@ describe('node crawler', () => { }); }); - it('completes with undefined names', () => { + it('completes with fs.readdir throwing an error', () => { process.platform = 'win32'; nodeCrawl = require('../node'); @@ -230,7 +230,7 @@ describe('node crawler', () => { data: {files}, extensions: ['js'], ignore: pearMatcher, - roots: ['/empty'], + roots: ['/error'], }).then(data => { expect(data.files).toEqual({}); }); diff --git a/packages/jest-haste-map/src/crawlers/node.js b/packages/jest-haste-map/src/crawlers/node.js index 004dd46f23a1..96ce13d6e076 100644 --- a/packages/jest-haste-map/src/crawlers/node.js +++ b/packages/jest-haste-map/src/crawlers/node.js @@ -30,7 +30,7 @@ function find( activeCalls++; fs.readdir(directory, (err, names) => { activeCalls--; - if (!names) { + if (err) { callback(result); return; } From f92bf6d5a78c832d690a178cbeb0d28935470288 Mon Sep 17 00:00:00 2001 From: Emilien Muraton Date: Wed, 29 Aug 2018 14:02:59 +0100 Subject: [PATCH 3/3] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5687739574bb..2c1ff53beac4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - `[babel-jest]` Make `getCacheKey()` take into account `createTransformer` options ([#6699](https://github.com/facebook/jest/pull/6699)) - `[docs]` Fix contributors link ([#6711](https://github.com/facebook/jest/pull/6711)) - `[website]` Fix website versions page to link to correct language ([#6734](https://github.com/facebook/jest/pull/6734)) +- `[jest-haste-map`] Catch crawler error when unsuccessfully reading directories ([#6761](https://github.com/facebook/jest/pull/6761)) ## 23.4.1