Skip to content

Commit b3c992c

Browse files
authored
fix(coverage): correct coverageConfigDefaults values and types (#9940)
1 parent faace1f commit b3c992c

File tree

6 files changed

+40
-19
lines changed

6 files changed

+40
-19
lines changed

packages/vitest/src/defaults.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import type {
22
BenchmarkUserOptions,
3-
CoverageV8Options,
4-
ResolvedCoverageOptions,
3+
CoverageOptions,
54
UserConfig,
65
} from './node/types/config'
6+
import type { FieldsWithDefaultValues } from './node/types/coverage'
77
import os from 'node:os'
88
import { isAgent, isCI } from './utils/env'
99

@@ -25,7 +25,7 @@ export const benchmarkConfigDefaults: Required<
2525
}
2626

2727
// These are the generic defaults for coverage. Providers may also set some provider specific defaults.
28-
export const coverageConfigDefaults: ResolvedCoverageOptions = {
28+
export const coverageConfigDefaults: Required<Pick<CoverageOptions, FieldsWithDefaultValues>> = {
2929
provider: 'v8',
3030
enabled: false,
3131
clean: true,
@@ -34,17 +34,25 @@ export const coverageConfigDefaults: ResolvedCoverageOptions = {
3434
exclude: [],
3535
reportOnFailure: false,
3636
reporter: [
37-
['text', {}],
38-
['html', {}],
39-
['clover', {}],
40-
['json', {}],
37+
'text',
38+
'html',
39+
'clover',
40+
'json',
4141
],
4242
allowExternal: false,
4343
excludeAfterRemap: false,
4444
processingConcurrency: Math.min(
4545
20,
4646
os.availableParallelism?.() ?? os.cpus().length,
4747
),
48+
ignoreClassMethods: [],
49+
skipFull: false,
50+
watermarks: {
51+
statements: [50, 80],
52+
functions: [50, 80],
53+
branches: [50, 80],
54+
lines: [50, 80],
55+
},
4856
}
4957

5058
export const fakeTimersDefaults: NonNullable<UserConfig['fakeTimers']> = {
@@ -78,7 +86,7 @@ export const configDefaults: Readonly<{
7886
css: {
7987
include: never[]
8088
}
81-
coverage: CoverageV8Options
89+
coverage: CoverageOptions
8290
fakeTimers: import('@sinonjs/fake-timers').FakeTimerInstallOpts
8391
maxConcurrency: number
8492
dangerouslyIgnoreUnhandledErrors: boolean
@@ -95,7 +103,7 @@ export const configDefaults: Readonly<{
95103
isolate: true,
96104
watch: !isCI && process.stdin.isTTY && !isAgent,
97105
globals: false,
98-
environment: 'node' as const,
106+
environment: 'node',
99107
clearMocks: false,
100108
restoreMocks: false,
101109
mockReset: false,
@@ -116,7 +124,7 @@ export const configDefaults: Readonly<{
116124
css: {
117125
include: [],
118126
},
119-
coverage: coverageConfigDefaults as CoverageV8Options,
127+
coverage: coverageConfigDefaults,
120128
fakeTimers: fakeTimersDefaults,
121129
maxConcurrency: 5,
122130
dangerouslyIgnoreUnhandledErrors: false,

packages/vitest/src/node/config/resolveConfig.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type {
88
ResolvedConfig,
99
UserConfig,
1010
} from '../types/config'
11-
import type { BaseCoverageOptions, CoverageReporterWithOptions } from '../types/coverage'
11+
import type { CoverageOptions, CoverageReporterWithOptions } from '../types/coverage'
1212
import crypto from 'node:crypto'
1313
import { pathToFileURL } from 'node:url'
1414
import { slash, toArray } from '@vitest/utils/helpers'
@@ -970,7 +970,7 @@ export function isBrowserEnabled(config: ResolvedConfig): boolean {
970970
return Boolean(config.browser?.enabled)
971971
}
972972

973-
export function resolveCoverageReporters(configReporters: NonNullable<BaseCoverageOptions['reporter']>): CoverageReporterWithOptions[] {
973+
export function resolveCoverageReporters(configReporters: NonNullable<CoverageOptions['reporter']>): CoverageReporterWithOptions[] {
974974
// E.g. { reporter: "html" }
975975
if (!Array.isArray(configReporters)) {
976976
return [[configReporters, {}]]

packages/vitest/src/node/coverage.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { CoverageMap } from 'istanbul-lib-coverage'
22
import type { TransformResult } from 'vite'
33
import type { Vitest } from '../node/core'
4-
import type { BaseCoverageOptions, CoverageModuleLoader, CoverageProvider, ReportContext, ResolvedCoverageOptions } from '../node/types/coverage'
4+
import type { CoverageModuleLoader, CoverageOptions, CoverageProvider, ReportContext, ResolvedCoverageOptions } from '../node/types/coverage'
55
import type { SerializedCoverageConfig } from '../runtime/config'
66
import type { AfterSuiteRunMeta } from '../types/general'
77
import type { TestProject } from './project'
@@ -778,7 +778,7 @@ function resolveGlobThresholds(
778778

779779
function assertConfigurationModule(config: unknown): asserts config is {
780780
test: {
781-
coverage: { thresholds: NonNullable<BaseCoverageOptions['thresholds']> }
781+
coverage: { thresholds: NonNullable<CoverageOptions['thresholds']> }
782782
}
783783
} {
784784
try {

packages/vitest/src/node/types/coverage.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export type CoverageReporterWithOptions<
9696
export type CoverageProviderName = 'v8' | 'istanbul' | 'custom' | undefined
9797

9898
/** Fields that have default values. Internally these will always be defined. */
99-
type FieldsWithDefaultValues
99+
export type FieldsWithDefaultValues
100100
= | 'provider'
101101
| 'enabled'
102102
| 'clean'
@@ -106,6 +106,11 @@ type FieldsWithDefaultValues
106106
| 'reportOnFailure'
107107
| 'allowExternal'
108108
| 'processingConcurrency'
109+
| 'reporter'
110+
| 'excludeAfterRemap'
111+
| 'ignoreClassMethods'
112+
| 'skipFull'
113+
| 'watermarks'
109114

110115
export type ResolvedCoverageOptions
111116
= CoverageOptions
@@ -276,8 +281,6 @@ export interface CoverageOptions {
276281
/**
277282
* Collect coverage only for files changed since a specified commit or branch.
278283
* Inherits the default value from `test.changed`.
279-
*
280-
* @default false
281284
*/
282285
changed?: boolean | string
283286

test/config/test/public.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { BaseCoverageOptions } from 'vitest/node'
1+
import type { CoverageOptions } from 'vitest/node'
22
import { resolve } from 'pathe'
33
import { expect, test } from 'vitest'
44
import { resolveConfig } from 'vitest/node'
@@ -106,7 +106,7 @@ test.for([
106106
expected: 'custom-html-dir',
107107
},
108108
] satisfies {
109-
options: BaseCoverageOptions
109+
options: CoverageOptions
110110
expected?: string
111111
}[])('coverage.htmlDir inference: $options', async ({ options, expected }) => {
112112
const { vitestConfig } = await resolveConfig({

test/coverage-test/test/configuration-options.test-d.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,16 @@ test('provider module', () => {
9191
reportOnFailure: true,
9292
allowExternal: true,
9393
processingConcurrency: 1,
94+
excludeAfterRemap: false,
95+
ignoreClassMethods: [],
96+
skipFull: true,
97+
watermarks: {
98+
statements: [80, 95],
99+
functions: [80, 95],
100+
branches: [80, 95],
101+
lines: [80, 95],
102+
},
103+
94104
}
95105
},
96106
clean(_?: boolean) {},

0 commit comments

Comments
 (0)