[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
test testing-tools vite
12

Configure Feed

Select the types of activity you want to include in your feed.

fix: don't panic when coverage.reporter is a string (#6267)

authored by

Vladimir and committed by
GitHub
(Aug 2, 2024, 1:21 PM +0200) 7b37d27b 081cfe03

+47 -21
+19 -1
test/coverage-test/test/reporters.test.ts
··· 1 - import { readdirSync } from 'node:fs' 1 + import { existsSync, readdirSync } from 'node:fs' 2 + import { rm } from 'node:fs/promises' 2 3 import { expect } from 'vitest' 3 4 import { runVitest, test } from '../utils' 4 5 ··· 15 16 16 17 const files = readdirSync('./coverage') 17 18 expect(files).toContain('coverage-final.json') 19 + }) 20 + 21 + test('reporter as string when coverage is disabled', async () => { 22 + if (existsSync('./coverage')) { 23 + await rm('./coverage', { recursive: true, force: true }) 24 + } 25 + 26 + await runVitest({ 27 + include, 28 + coverage: { 29 + enabled: false, 30 + reporter: 'json', 31 + all: false, 32 + }, 33 + }) 34 + 35 + expect(existsSync('./coverage')).toBe(false) 18 36 }) 19 37 20 38 test('reporter as list of strings', async () => {
+2 -19
packages/vitest/src/utils/coverage.ts
··· 2 2 import mm from 'micromatch' 3 3 import type { CoverageMap } from 'istanbul-lib-coverage' 4 4 import type { BaseCoverageOptions, ResolvedCoverageOptions } from '../node/types/coverage' 5 + import { resolveCoverageReporters } from '../node/config/resolveConfig' 5 6 6 7 type Threshold = 'lines' | 'functions' | 'statements' | 'branches' 7 8 ··· 242 243 resolveReporters( 243 244 configReporters: NonNullable<BaseCoverageOptions['reporter']>, 244 245 ): ResolvedCoverageOptions['reporter'] { 245 - // E.g. { reporter: "html" } 246 - if (!Array.isArray(configReporters)) { 247 - return [[configReporters, {}]] 248 - } 249 - 250 - const resolvedReporters: ResolvedCoverageOptions['reporter'] = [] 251 - 252 - for (const reporter of configReporters) { 253 - if (Array.isArray(reporter)) { 254 - // E.g. { reporter: [ ["html", { skipEmpty: true }], ["lcov"], ["json", { file: "map.json" }] ]} 255 - resolvedReporters.push([reporter[0], reporter[1] as Record<string, unknown> || {}]) 256 - } 257 - else { 258 - // E.g. { reporter: ["html", "json"]} 259 - resolvedReporters.push([reporter, {}]) 260 - } 261 - } 262 - 263 - return resolvedReporters 246 + return resolveCoverageReporters(configReporters) as any 264 247 } 265 248 266 249 hasTerminalReporter(reporters: ResolvedCoverageOptions['reporter']) {
+25
packages/vitest/src/node/config/resolveConfig.ts
··· 24 24 import type { BenchmarkBuiltinReporters } from '../reporters' 25 25 import { builtinPools } from '../pool' 26 26 import type { Logger } from '../logger' 27 + import type { BaseCoverageOptions, CoverageReporterWithOptions } from '../types/coverage' 27 28 28 29 function resolvePath(path: string, root: string) { 29 30 return normalize( ··· 228 229 '@vitest/coverage-v8 does not work with --browser. Use @vitest/coverage-istanbul instead', 229 230 ) 230 231 } 232 + 233 + resolved.coverage.reporter = resolveCoverageReporters(resolved.coverage.reporter) 231 234 232 235 if (resolved.coverage.enabled && resolved.coverage.reportsDirectory) { 233 236 const reportsDirectory = resolve( ··· 788 791 789 792 export function isBrowserEnabled(config: ResolvedConfig): boolean { 790 793 return Boolean(config.browser?.enabled) 794 + } 795 + 796 + export function resolveCoverageReporters(configReporters: NonNullable<BaseCoverageOptions['reporter']>): CoverageReporterWithOptions[] { 797 + // E.g. { reporter: "html" } 798 + if (!Array.isArray(configReporters)) { 799 + return [[configReporters, {}]] 800 + } 801 + 802 + const resolvedReporters: CoverageReporterWithOptions[] = [] 803 + 804 + for (const reporter of configReporters) { 805 + if (Array.isArray(reporter)) { 806 + // E.g. { reporter: [ ["html", { skipEmpty: true }], ["lcov"], ["json", { file: "map.json" }] ]} 807 + resolvedReporters.push([reporter[0], reporter[1] as Record<string, unknown> || {}]) 808 + } 809 + else { 810 + // E.g. { reporter: ["html", "json"]} 811 + resolvedReporters.push([reporter, {}]) 812 + } 813 + } 814 + 815 + return resolvedReporters 791 816 }
+1 -1
packages/vitest/src/node/types/coverage.ts
··· 78 78 79 79 export type CoverageReporter = keyof ReportOptions | (string & {}) 80 80 81 - type CoverageReporterWithOptions< 81 + export type CoverageReporterWithOptions< 82 82 ReporterName extends CoverageReporter = CoverageReporter, 83 83 > = ReporterName extends keyof ReportOptions 84 84 ? ReportOptions[ReporterName] extends never