From fd4eacc1ac872b0a8c2690648a791701cb8b2e7d Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Fri, 14 Feb 2020 15:39:09 -0500 Subject: [PATCH 1/5] adds ability to pass custom reporter config --- docs/Configuration.md | 8 +++++++- packages/jest-reporters/src/coverage_reporter.ts | 9 ++++++++- packages/jest-types/src/Config.ts | 4 ++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index a345afe2f3c7..b5cdf14bad24 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -195,7 +195,7 @@ Note that using `v8` is considered experimental. This uses V8's builtin code cov 1. Tests needs to run in Node test environment (support for `jsdom` requires [`jest-environment-jsdom-sixteen`](https://www.npmjs.com/package/jest-environment-jsdom-sixteen)) 1. V8 has way better data in the later versions, so using the latest versions of node (v13 at the time of this writing) will yield better results -### `coverageReporters` [array\] +### `coverageReporters` [array\] Default: `["json", "lcov", "text", "clover"]` @@ -203,6 +203,12 @@ A list of reporter names that Jest uses when writing coverage reports. Any [ista _Note: Setting this option overwrites the default values. Add `"text"` or `"text-summary"` to see a coverage summary in the console output._ +_Nost: You can pass additional options to the istanbul reporter using the tuple form. For example: + +```js +["json", ["lcov", { "projectRoot": "../../"}]] +``` + ### `coverageThreshold` [object] Default: `undefined` diff --git a/packages/jest-reporters/src/coverage_reporter.ts b/packages/jest-reporters/src/coverage_reporter.ts index 1da07f073b76..5722287cec91 100644 --- a/packages/jest-reporters/src/coverage_reporter.ts +++ b/packages/jest-reporters/src/coverage_reporter.ts @@ -104,8 +104,15 @@ export default class CoverageReporter extends BaseReporter { coverageReporters.push('text-summary'); } coverageReporters.forEach(reporter => { + let additionalOptions = {}; + if (Array.isArray(reporter)) { + [reporter, additionalOptions] = reporter; + } istanbulReports - .create(reporter, {maxCols: process.stdout.columns || Infinity}) + .create(reporter, { + ...additionalOptions, + maxCols: process.stdout.columns || Infinity, + }) // @ts-ignore .execute(reportContext); }); diff --git a/packages/jest-types/src/Config.ts b/packages/jest-types/src/Config.ts index b16cc1c71d46..5bb9eea84b11 100644 --- a/packages/jest-types/src/Config.ts +++ b/packages/jest-types/src/Config.ts @@ -39,7 +39,7 @@ export type DefaultOptions = { clearMocks: boolean; collectCoverage: boolean; coveragePathIgnorePatterns: Array; - coverageReporters: Array; + coverageReporters: Array; coverageProvider: CoverageProvider; errorOnDeprecated: boolean; expand: boolean; @@ -241,7 +241,7 @@ export type GlobalConfig = { coverageDirectory: string; coveragePathIgnorePatterns?: Array; coverageProvider: CoverageProvider; - coverageReporters: Array; + coverageReporters: Array; coverageThreshold?: CoverageThreshold; detectLeaks: boolean; detectOpenHandles: boolean; From 7faed1074f754d8a99406dfa69b37507089fadc8 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Fri, 14 Feb 2020 16:03:25 -0500 Subject: [PATCH 2/5] fix lint errors --- docs/Configuration.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index b5cdf14bad24..5339a82b1c5a 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -203,10 +203,10 @@ A list of reporter names that Jest uses when writing coverage reports. Any [ista _Note: Setting this option overwrites the default values. Add `"text"` or `"text-summary"` to see a coverage summary in the console output._ -_Nost: You can pass additional options to the istanbul reporter using the tuple form. For example: +_Note: You can pass additional options to the istanbul reporter using the tuple form. For example:_ -```js -["json", ["lcov", { "projectRoot": "../../"}]] +```json +["json", ["lcov", {"projectRoot": "../../"}]] ``` ### `coverageThreshold` [object] From d8be437d84280cefccc2005330244ff7e50d1f1c Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Fri, 14 Feb 2020 18:57:09 -0500 Subject: [PATCH 3/5] adds changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eff713ac0b7a..2b556336e00c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - `[jest-runtime]` Override `module.createRequire` to return a Jest-compatible `require` function ([#9469](https://github.com/facebook/jest/pull/9469)) - `[*]` Support array of paths for `moduleNameMapper` aliases ([#9465](https://github.com/facebook/jest/pull/9465)) +- `[jest-reporters]` Adds ability to pass options to the istanbul-reporter through `coverageReporters` ([#9572](https://github.com/facebook/jest/pull/9572)) ### Fixes From bf6d69f1f8f6b05ca5d9c7f66181c47f2e789f1d Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Fri, 14 Feb 2020 19:07:32 -0500 Subject: [PATCH 4/5] adds spec for reporter creation --- .../src/__tests__/coverage_reporter.test.js | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/jest-reporters/src/__tests__/coverage_reporter.test.js b/packages/jest-reporters/src/__tests__/coverage_reporter.test.js index 491a52173711..0f1a5d12fed1 100644 --- a/packages/jest-reporters/src/__tests__/coverage_reporter.test.js +++ b/packages/jest-reporters/src/__tests__/coverage_reporter.test.js @@ -20,6 +20,7 @@ jest let libCoverage; let libSourceMaps; let CoverageReporter; +let istanbulReports; import path from 'path'; import mock from 'mock-fs'; @@ -28,6 +29,7 @@ beforeEach(() => { CoverageReporter = require('../coverage_reporter').default; libCoverage = require('istanbul-lib-coverage'); libSourceMaps = require('istanbul-lib-source-maps'); + istanbulReports = require('istanbul-reports'); const fileTree = {}; fileTree[process.cwd() + '/path-test-files'] = { @@ -417,4 +419,23 @@ describe('onRunComplete', () => { expect(testReporter.getLastError()).toBeUndefined(); }); }); + + test(`that it passes custom options when creating reporters`, () => { + const testReporter = new CoverageReporter({ + coverageReporters: ['json', ['lcov', {maxCols: 10, projectRoot: './'}]], + }); + testReporter.log = jest.fn(); + return testReporter + .onRunComplete(new Set(), {}, mockAggResults) + .then(() => { + expect(istanbulReports.create).toHaveBeenCalledWith('json', { + maxCols: process.stdout.columns || Infinity, + }); + expect(istanbulReports.create).toHaveBeenCalledWith('lcov', { + maxCols: process.stdout.columns || Infinity, + projectRoot: './', + }); + expect(testReporter.getLastError()).toBeUndefined(); + }); + }); }); From 2dc87f226e4935005fe61acf8f995d947249a1b6 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Sat, 15 Feb 2020 15:19:51 -0500 Subject: [PATCH 5/5] let user defined variables override defaults --- packages/jest-reporters/src/__tests__/coverage_reporter.test.js | 2 +- packages/jest-reporters/src/coverage_reporter.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/jest-reporters/src/__tests__/coverage_reporter.test.js b/packages/jest-reporters/src/__tests__/coverage_reporter.test.js index 0f1a5d12fed1..7e1cf5c4ceb6 100644 --- a/packages/jest-reporters/src/__tests__/coverage_reporter.test.js +++ b/packages/jest-reporters/src/__tests__/coverage_reporter.test.js @@ -432,7 +432,7 @@ describe('onRunComplete', () => { maxCols: process.stdout.columns || Infinity, }); expect(istanbulReports.create).toHaveBeenCalledWith('lcov', { - maxCols: process.stdout.columns || Infinity, + maxCols: 10, projectRoot: './', }); expect(testReporter.getLastError()).toBeUndefined(); diff --git a/packages/jest-reporters/src/coverage_reporter.ts b/packages/jest-reporters/src/coverage_reporter.ts index 5722287cec91..234f632643b6 100644 --- a/packages/jest-reporters/src/coverage_reporter.ts +++ b/packages/jest-reporters/src/coverage_reporter.ts @@ -110,8 +110,8 @@ export default class CoverageReporter extends BaseReporter { } istanbulReports .create(reporter, { - ...additionalOptions, maxCols: process.stdout.columns || Infinity, + ...additionalOptions, }) // @ts-ignore .execute(reportContext);