diff --git a/CHANGELOG.md b/CHANGELOG.md index 5495a62f3f76..1693570322ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - `[jest-config]` Support config files exporting (`async`) `function`s ([#10001](https://github.com/facebook/jest/pull/10001)) - `[jest-cli, jest-core]` Add `--selectProjects` CLI argument to filter test suites by project name ([#8612](https://github.com/facebook/jest/pull/8612)) +- `[jest-cli, jest-init]` Add `coverageProvider` to `jest --init` prompts ([#10044](https://github.com/facebook/jest/pull/10044)) ### Fixes diff --git a/packages/jest-cli/src/init/__tests__/init.test.js b/packages/jest-cli/src/init/__tests__/init.test.js index 579ab04f24fc..74012354c51a 100644 --- a/packages/jest-cli/src/init/__tests__/init.test.js +++ b/packages/jest-cli/src/init/__tests__/init.test.js @@ -93,6 +93,28 @@ describe('init', () => { expect(evaluatedConfig).toEqual({coverageDirectory: 'coverage'}); }); + it('should create configuration for {coverageProvider: "babel"}', async () => { + prompts.mockReturnValueOnce({coverageProvider: 'babel'}); + + await init(resolveFromFixture('only_package_json')); + + const writtenJestConfig = fs.writeFileSync.mock.calls[0][1]; + const evaluatedConfig = eval(writtenJestConfig); + // should modify when the default coverageProvider will be changed to "v8" + expect(evaluatedConfig).toEqual({}); + }); + + it('should create configuration for {coverageProvider: "v8"}', async () => { + prompts.mockReturnValueOnce({coverageProvider: 'v8'}); + + await init(resolveFromFixture('only_package_json')); + + const writtenJestConfig = fs.writeFileSync.mock.calls[0][1]; + const evaluatedConfig = eval(writtenJestConfig); + // should modify when the default coverageProvider will be changed to "v8" + expect(evaluatedConfig).toEqual({coverageProvider: 'v8'}); + }); + it('should create configuration for {environment: "jsdom"}', async () => { prompts.mockReturnValueOnce({environment: 'jsdom'}); diff --git a/packages/jest-cli/src/init/generate_config_file.ts b/packages/jest-cli/src/init/generate_config_file.ts index 36c19bdf3759..c968e2985e19 100644 --- a/packages/jest-cli/src/init/generate_config_file.ts +++ b/packages/jest-cli/src/init/generate_config_file.ts @@ -35,7 +35,7 @@ const generateConfigFile = ( results: Record, generateEsm = false, ): string => { - const {coverage, clearMocks, environment} = results; + const {coverage, coverageProvider, clearMocks, environment} = results; const overrides: Record = {}; @@ -45,6 +45,12 @@ const generateConfigFile = ( }); } + if (coverageProvider === 'v8') { + Object.assign(overrides, { + coverageProvider: 'v8', + }); + } + if (environment === 'node') { Object.assign(overrides, { testEnvironment: 'node', diff --git a/packages/jest-cli/src/init/index.ts b/packages/jest-cli/src/init/index.ts index 7a92a29ec0d7..c39ca0b68f69 100644 --- a/packages/jest-cli/src/init/index.ts +++ b/packages/jest-cli/src/init/index.ts @@ -28,6 +28,7 @@ const { type PromptsResults = { clearMocks: boolean; coverage: boolean; + coverageProvider: boolean; environment: boolean; scripts: boolean; }; diff --git a/packages/jest-cli/src/init/questions.ts b/packages/jest-cli/src/init/questions.ts index 1473cb55382b..ee192c697875 100644 --- a/packages/jest-cli/src/init/questions.ts +++ b/packages/jest-cli/src/init/questions.ts @@ -24,6 +24,16 @@ const defaultQuestions: Array = [ name: 'coverage', type: 'confirm', }, + { + choices: [ + {title: 'babel', value: 'babel'}, + {title: 'v8', value: 'v8'}, + ], + initial: 0, + message: 'Which coverageProvider should be used to collect coverage?', + name: 'coverageProvider', + type: 'select', + }, { initial: false, message: 'Automatically clear mock calls and instances between every test?',