diff --git a/CHANGELOG.md b/CHANGELOG.md index 917db93ebb8c..dac4800239a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Fixes - `[jest-runtime]` Fix issue where user cannot utilize dynamic import despite specifying `--experimental-vm-modules` Node option ([#15842](https://github.com/jestjs/jest/pull/15842)) +- `[jest-config]` Fix issue where user cannot toggle `collectCoverage` at project level ([#15588](https://github.com/jestjs/jest/issues/15588)) ## 30.2.0 diff --git a/e2e/__tests__/__snapshots__/showConfig.test.ts.snap b/e2e/__tests__/__snapshots__/showConfig.test.ts.snap index 6e3b84b759de..b86d7957163a 100644 --- a/e2e/__tests__/__snapshots__/showConfig.test.ts.snap +++ b/e2e/__tests__/__snapshots__/showConfig.test.ts.snap @@ -105,7 +105,6 @@ exports[`--showConfig outputs config info and exits 1`] = ` "bail": 0, "changedFilesWithAncestor": false, "ci": true, - "collectCoverage": false, "collectCoverageFrom": [], "coverageDirectory": "<>/coverage", "coverageProvider": "babel", diff --git a/packages/jest-config/src/ValidConfig.ts b/packages/jest-config/src/ValidConfig.ts index f40c1c9247d1..ab91073adc61 100644 --- a/packages/jest-config/src/ValidConfig.ts +++ b/packages/jest-config/src/ValidConfig.ts @@ -208,6 +208,7 @@ export const initialProjectOptions: Config.InitialProjectOptions = { cache: true, cacheDirectory: '/tmp/user/jest', clearMocks: false, + collectCoverage: false, collectCoverageFrom: ['src', '!public'], coverageDirectory: 'coverage', coveragePathIgnorePatterns: [NODE_MODULES_REGEXP], diff --git a/packages/jest-config/src/index.ts b/packages/jest-config/src/index.ts index e24405d15693..baf54c7ec1c2 100644 --- a/packages/jest-config/src/index.ts +++ b/packages/jest-config/src/index.ts @@ -151,6 +151,7 @@ const groupOptions = ( cache: options.cache, cacheDirectory: options.cacheDirectory, clearMocks: options.clearMocks, + collectCoverage: options.collectCoverage, collectCoverageFrom: options.collectCoverageFrom, coverageDirectory: options.coverageDirectory, coveragePathIgnorePatterns: options.coveragePathIgnorePatterns, diff --git a/packages/jest-config/src/normalize.ts b/packages/jest-config/src/normalize.ts index e2ed840cf020..656600e7d723 100644 --- a/packages/jest-config/src/normalize.ts +++ b/packages/jest-config/src/normalize.ts @@ -554,6 +554,9 @@ export default async function normalize( if (!options.coverageDirectory) { options.coverageDirectory = path.resolve(options.rootDir, 'coverage'); } + if (!Object.hasOwn(options, 'collectCoverage')) { + options.collectCoverage = undefined; + } setupBabelJest(options); // TODO: Type this properly diff --git a/packages/jest-transform/src/__tests__/ScriptTransformer.test.ts b/packages/jest-transform/src/__tests__/ScriptTransformer.test.ts index b1399872f51f..7671c76d2907 100644 --- a/packages/jest-transform/src/__tests__/ScriptTransformer.test.ts +++ b/packages/jest-transform/src/__tests__/ScriptTransformer.test.ts @@ -314,6 +314,7 @@ describe('ScriptTransformer', () => { config = makeProjectConfig({ cache: true, cacheDirectory: '/cache/', + collectCoverage: undefined, id: 'test', rootDir: '/', transformIgnorePatterns: ['/node_modules/'], diff --git a/packages/jest-transform/src/__tests__/__snapshots__/ScriptTransformer.test.ts.snap b/packages/jest-transform/src/__tests__/__snapshots__/ScriptTransformer.test.ts.snap index 17caaf4e17aa..bce5ae00e3a5 100644 --- a/packages/jest-transform/src/__tests__/__snapshots__/ScriptTransformer.test.ts.snap +++ b/packages/jest-transform/src/__tests__/__snapshots__/ScriptTransformer.test.ts.snap @@ -26,6 +26,7 @@ exports[`ScriptTransformer in async mode, passes expected transform options to g "cache": true, "cacheDirectory": "/cache/", "clearMocks": false, + "collectCoverage": undefined, "collectCoverageFrom": Array [ "src", "!public", @@ -177,6 +178,7 @@ exports[`ScriptTransformer passes expected transform options to getCacheKey 1`] "cache": true, "cacheDirectory": "/cache/", "clearMocks": false, + "collectCoverage": undefined, "collectCoverageFrom": Array [ "src", "!public", @@ -302,6 +304,7 @@ exports[`ScriptTransformer passes expected transform options to getCacheKeyAsync "cache": true, "cacheDirectory": "/cache/", "clearMocks": false, + "collectCoverage": undefined, "collectCoverageFrom": Array [ "src", "!public", diff --git a/packages/jest-transform/src/__tests__/shouldInstrument.test.ts b/packages/jest-transform/src/__tests__/shouldInstrument.test.ts index e48229f06a6f..c825a411816f 100644 --- a/packages/jest-transform/src/__tests__/shouldInstrument.test.ts +++ b/packages/jest-transform/src/__tests__/shouldInstrument.test.ts @@ -18,7 +18,10 @@ describe('shouldInstrument', () => { }), changedFiles: undefined, }; - const defaultConfig = makeProjectConfig({rootDir: '/'}); + const defaultConfig = makeProjectConfig({ + collectCoverage: undefined, + rootDir: '/', + }); describe('should return true', () => { const testShouldInstrument = ( filename = defaultFilename, diff --git a/packages/jest-transform/src/shouldInstrument.ts b/packages/jest-transform/src/shouldInstrument.ts index 511a7f5e1f3d..dc6fc22f9b73 100644 --- a/packages/jest-transform/src/shouldInstrument.ts +++ b/packages/jest-transform/src/shouldInstrument.ts @@ -36,7 +36,11 @@ export default function shouldInstrument( config: Config.ProjectConfig, loadedFilenames?: Array, ): boolean { - if (!options.collectCoverage) { + // Do not instrument when `collectCoverage` is toggled off global or project-wide + if ( + !options.collectCoverage || + (typeof config.collectCoverage === 'boolean' && !config.collectCoverage) + ) { return false; } diff --git a/packages/jest-types/src/Config.ts b/packages/jest-types/src/Config.ts index 1a0a9d0b64ff..976d5c2f0209 100644 --- a/packages/jest-types/src/Config.ts +++ b/packages/jest-types/src/Config.ts @@ -331,6 +331,7 @@ export type ProjectConfig = { cache: boolean; cacheDirectory: string; clearMocks: boolean; + collectCoverage?: boolean; collectCoverageFrom: Array; coverageDirectory: string; coveragePathIgnorePatterns: Array; diff --git a/packages/test-utils/src/config.ts b/packages/test-utils/src/config.ts index 3f5032e5c580..85a584e7a959 100644 --- a/packages/test-utils/src/config.ts +++ b/packages/test-utils/src/config.ts @@ -75,6 +75,7 @@ const DEFAULT_PROJECT_CONFIG: Config.ProjectConfig = { cache: false, cacheDirectory: '/test_cache_dir/', clearMocks: false, + collectCoverage: undefined, collectCoverageFrom: ['src', '!public'], coverageDirectory: 'coverage', coveragePathIgnorePatterns: [],