From 2f27060eca33384559942f1eaf4e42d3e2ceb2f8 Mon Sep 17 00:00:00 2001 From: Wes Pickett Date: Wed, 27 Apr 2022 17:21:40 +0400 Subject: [PATCH] fix: issue with trailing slash in matching coverageThreshold keys (#12714) --- CHANGELOG.md | 2 ++ packages/jest-reporters/src/CoverageReporter.ts | 11 ++++++++++- .../src/__tests__/CoverageReporter.test.js | 14 +++++++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b5e77a5f07b..66af53abd33f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Fixes +- `[@jest/reporters]` Fix trailing slash in matching `coverageThreshold` key ([#12714](https://github.com/facebook/jest/pull/12714)) + ### Chore & Maintenance ### Performance diff --git a/packages/jest-reporters/src/CoverageReporter.ts b/packages/jest-reporters/src/CoverageReporter.ts index 5e0c74af22fe..3c7c21e89ede 100644 --- a/packages/jest-reporters/src/CoverageReporter.ts +++ b/packages/jest-reporters/src/CoverageReporter.ts @@ -273,7 +273,16 @@ export default class CoverageReporter extends BaseReporter { const pathOrGlobMatches = thresholdGroups.reduce< Array<[string, string]> >((agg, thresholdGroup) => { - const absoluteThresholdGroup = path.resolve(thresholdGroup); + // Preserve trailing slash, but not required if root dir + // See https://github.com/facebook/jest/issues/12703 + const resolvedThresholdGroup = path.resolve(thresholdGroup); + const suffix = + (thresholdGroup.endsWith(path.sep) || + (process.platform === 'win32' && thresholdGroup.endsWith('/'))) && + !resolvedThresholdGroup.endsWith(path.sep) + ? path.sep + : ''; + const absoluteThresholdGroup = `${resolvedThresholdGroup}${suffix}`; // The threshold group might be a path: diff --git a/packages/jest-reporters/src/__tests__/CoverageReporter.test.js b/packages/jest-reporters/src/__tests__/CoverageReporter.test.js index d3222c158e67..1b77144cfcdc 100644 --- a/packages/jest-reporters/src/__tests__/CoverageReporter.test.js +++ b/packages/jest-reporters/src/__tests__/CoverageReporter.test.js @@ -44,7 +44,9 @@ beforeEach(() => { 'non_covered_file.js': '', 'relative_path_file.js': '', }; - + fileTree[`${process.cwd()}/path-test`] = { + '100pc_coverage_file.js': '', + }; mock(fileTree); }); @@ -79,6 +81,10 @@ describe('onRunComplete', () => { statements: {covered: 5, pct: 50, skipped: 0, total: 10}, }; const fileCoverage = [ + [ + './path-test/100pc_coverage_file.js', + {statements: {covered: 10, pct: 100, total: 10}}, + ], ['./path-test-files/covered_file_without_threshold.js'], ['./path-test-files/full_path_file.js'], ['./path-test-files/relative_path_file.js'], @@ -309,6 +315,9 @@ describe('onRunComplete', () => { './path-test-files/': { statements: 50, }, + './path-test/': { + statements: 100, + }, global: { statements: 100, }, @@ -370,6 +379,9 @@ describe('onRunComplete', () => { './path-test-files/100pc_coverage_file.js': { statements: 100, }, + './path-test/100pc_coverage_file.js': { + statements: 100, + }, global: { statements: 50, },