From a2cf4a699f0a9aa654abfe3902d3001ad0549215 Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Sun, 4 Jun 2023 15:29:19 +0800 Subject: [PATCH 1/3] fix: the cli option is passed to coverage.exclude --- packages/vitest/src/node/config.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/vitest/src/node/config.ts b/packages/vitest/src/node/config.ts index e1648daccc8f..caae4febff92 100644 --- a/packages/vitest/src/node/config.ts +++ b/packages/vitest/src/node/config.ts @@ -212,7 +212,9 @@ export function resolveConfig( ?? resolve(resolved.root, file), ), ) - resolved.coverage.exclude.push(...resolved.setupFiles.map(file => relative(resolved.root, file))) + const exclude = toArray(resolved.coverage.exclude || []) + exclude.push(...resolved.setupFiles.map(file => relative(resolved.root, file))) + resolved.coverage.exclude = exclude resolved.forceRerunTriggers = [ ...resolved.forceRerunTriggers, From efb9eb5db0c99f1b7b202935e7df46b10790b317 Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Sun, 4 Jun 2023 20:48:11 +0800 Subject: [PATCH 2/3] feat: add guardOption --- packages/vitest/src/node/config.ts | 77 ++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 4 deletions(-) diff --git a/packages/vitest/src/node/config.ts b/packages/vitest/src/node/config.ts index caae4febff92..12b9495ad21f 100644 --- a/packages/vitest/src/node/config.ts +++ b/packages/vitest/src/node/config.ts @@ -3,7 +3,7 @@ import { normalize, relative, resolve } from 'pathe' import c from 'picocolors' import type { ResolvedConfig as ResolvedViteConfig } from 'vite' -import type { ApiConfig, ResolvedConfig, UserConfig, VitestRunMode } from '../types' +import type { ApiConfig, BaseCoverageOptions, CoverageC8Options, CoverageIstanbulOptions, ResolvedConfig, UserConfig, VitestRunMode } from '../types' import { defaultBrowserPort, defaultPort } from '../constants' import { benchmarkConfigDefaults, configDefaults } from '../defaults' import { isCI, toArray } from '../utils' @@ -55,6 +55,76 @@ export function resolveApiServerConfig( return api } +function guardOptions(options: UserConfig) { + if (options.benchmark) { + if (options.benchmark.include) + options.benchmark.include = toArray(options.benchmark.include) + + if (options.benchmark.exclude) + options.benchmark.exclude = toArray(options.benchmark.exclude) + + if (options.benchmark.includeSource) + options.benchmark.includeSource = toArray(options.benchmark.includeSource) + } + if (options.include) + options.include = toArray(options.include) + + if (options.exclude) + options.exclude = toArray(options.exclude) + + if (options.deps) { + if (options.deps.external) + options.deps.external = toArray(options.deps.external) + + if (options.deps.moduleDirectories) + options.deps.moduleDirectories = toArray(options.deps.moduleDirectories) + } + if (options.includeSource) + options.includeSource = toArray(options.includeSource) + + if (options.environmentMatchGlobs) + options.environmentMatchGlobs = toArray(options.environmentMatchGlobs) + + if (options.poolMatchGlobs) + options.poolMatchGlobs = toArray(options.poolMatchGlobs) + + if (options.watchExclude) + options.watchExclude = toArray(options.watchExclude) + + if (options.forceRerunTriggers) + options.forceRerunTriggers = toArray(options.forceRerunTriggers) + + if (options.coverage) { + const coverage = options.coverage + if (coverage.exclude) + coverage.exclude = toArray(options.coverage.exclude) + + if ((coverage as BaseCoverageOptions).include) + (coverage as BaseCoverageOptions).include = toArray((coverage as BaseCoverageOptions).include) + + if ((coverage as CoverageIstanbulOptions).ignoreClassMethods) + (coverage as CoverageIstanbulOptions).ignoreClassMethods = toArray((coverage as CoverageIstanbulOptions).ignoreClassMethods) + + if ((coverage as CoverageC8Options).src) + (coverage as CoverageC8Options).src = toArray((coverage as CoverageC8Options).src) + } + if (options.transformMode) { + if (options.transformMode.ssr) + options.transformMode.ssr = toArray(options.transformMode.ssr) + + if (options.transformMode.web) + options.transformMode.web = toArray(options.transformMode.web) + } + if (options.snapshotFormat) { + if (options.snapshotFormat.plugins) + options.snapshotFormat.plugins = toArray(options.snapshotFormat.plugins) + } + if (options.fakeTimers) { + if (options.fakeTimers.toFake) + options.fakeTimers.toFake = toArray(options.fakeTimers.toFake) + } +} + export function resolveConfig( mode: VitestRunMode, options: UserConfig, @@ -78,6 +148,7 @@ export function resolveConfig( options.environment = 'happy-dom' } + guardOptions(options) const resolved = { ...configDefaults, @@ -212,9 +283,7 @@ export function resolveConfig( ?? resolve(resolved.root, file), ), ) - const exclude = toArray(resolved.coverage.exclude || []) - exclude.push(...resolved.setupFiles.map(file => relative(resolved.root, file))) - resolved.coverage.exclude = exclude + resolved.coverage.exclude.push(...resolved.setupFiles.map(file => relative(resolved.root, file))) resolved.forceRerunTriggers = [ ...resolved.forceRerunTriggers, From 909309053a9aca06fba595eb3a3987c451d4a01a Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Tue, 6 Jun 2023 15:10:56 +0800 Subject: [PATCH 3/3] fix: guard coverage option --- packages/vitest/src/node/cli.ts | 17 ++++++- packages/vitest/src/node/config.ts | 73 +----------------------------- 2 files changed, 17 insertions(+), 73 deletions(-) diff --git a/packages/vitest/src/node/cli.ts b/packages/vitest/src/node/cli.ts index 260fb0d8abd0..8a3b6b7557e5 100644 --- a/packages/vitest/src/node/cli.ts +++ b/packages/vitest/src/node/cli.ts @@ -2,7 +2,8 @@ import { normalize } from 'pathe' import cac from 'cac' import c from 'picocolors' import { version } from '../../package.json' -import type { Vitest, VitestRunMode } from '../types' +import { toArray } from '../utils' +import type { BaseCoverageOptions, CoverageC8Options, CoverageIstanbulOptions, Vitest, VitestRunMode } from '../types' import type { CliOptions } from './cli-api' import { startVitest } from './cli-api' import { divider } from './reporters/renderers/utils' @@ -147,6 +148,20 @@ function normalizeCliOptions(argv: CliOptions): CliOptions { else delete argv.dir + if (argv.coverage) { + const coverage = argv.coverage + if (coverage.exclude) + coverage.exclude = toArray(coverage.exclude) + + if ((coverage as BaseCoverageOptions).include) + (coverage as BaseCoverageOptions).include = toArray((coverage as BaseCoverageOptions).include) + + if ((coverage as CoverageIstanbulOptions).ignoreClassMethods) + (coverage as CoverageIstanbulOptions).ignoreClassMethods = toArray((coverage as CoverageIstanbulOptions).ignoreClassMethods) + + if ((coverage as CoverageC8Options).src) + (coverage as CoverageC8Options).src = toArray((coverage as CoverageC8Options).src) + } return argv } diff --git a/packages/vitest/src/node/config.ts b/packages/vitest/src/node/config.ts index 12b9495ad21f..e1648daccc8f 100644 --- a/packages/vitest/src/node/config.ts +++ b/packages/vitest/src/node/config.ts @@ -3,7 +3,7 @@ import { normalize, relative, resolve } from 'pathe' import c from 'picocolors' import type { ResolvedConfig as ResolvedViteConfig } from 'vite' -import type { ApiConfig, BaseCoverageOptions, CoverageC8Options, CoverageIstanbulOptions, ResolvedConfig, UserConfig, VitestRunMode } from '../types' +import type { ApiConfig, ResolvedConfig, UserConfig, VitestRunMode } from '../types' import { defaultBrowserPort, defaultPort } from '../constants' import { benchmarkConfigDefaults, configDefaults } from '../defaults' import { isCI, toArray } from '../utils' @@ -55,76 +55,6 @@ export function resolveApiServerConfig( return api } -function guardOptions(options: UserConfig) { - if (options.benchmark) { - if (options.benchmark.include) - options.benchmark.include = toArray(options.benchmark.include) - - if (options.benchmark.exclude) - options.benchmark.exclude = toArray(options.benchmark.exclude) - - if (options.benchmark.includeSource) - options.benchmark.includeSource = toArray(options.benchmark.includeSource) - } - if (options.include) - options.include = toArray(options.include) - - if (options.exclude) - options.exclude = toArray(options.exclude) - - if (options.deps) { - if (options.deps.external) - options.deps.external = toArray(options.deps.external) - - if (options.deps.moduleDirectories) - options.deps.moduleDirectories = toArray(options.deps.moduleDirectories) - } - if (options.includeSource) - options.includeSource = toArray(options.includeSource) - - if (options.environmentMatchGlobs) - options.environmentMatchGlobs = toArray(options.environmentMatchGlobs) - - if (options.poolMatchGlobs) - options.poolMatchGlobs = toArray(options.poolMatchGlobs) - - if (options.watchExclude) - options.watchExclude = toArray(options.watchExclude) - - if (options.forceRerunTriggers) - options.forceRerunTriggers = toArray(options.forceRerunTriggers) - - if (options.coverage) { - const coverage = options.coverage - if (coverage.exclude) - coverage.exclude = toArray(options.coverage.exclude) - - if ((coverage as BaseCoverageOptions).include) - (coverage as BaseCoverageOptions).include = toArray((coverage as BaseCoverageOptions).include) - - if ((coverage as CoverageIstanbulOptions).ignoreClassMethods) - (coverage as CoverageIstanbulOptions).ignoreClassMethods = toArray((coverage as CoverageIstanbulOptions).ignoreClassMethods) - - if ((coverage as CoverageC8Options).src) - (coverage as CoverageC8Options).src = toArray((coverage as CoverageC8Options).src) - } - if (options.transformMode) { - if (options.transformMode.ssr) - options.transformMode.ssr = toArray(options.transformMode.ssr) - - if (options.transformMode.web) - options.transformMode.web = toArray(options.transformMode.web) - } - if (options.snapshotFormat) { - if (options.snapshotFormat.plugins) - options.snapshotFormat.plugins = toArray(options.snapshotFormat.plugins) - } - if (options.fakeTimers) { - if (options.fakeTimers.toFake) - options.fakeTimers.toFake = toArray(options.fakeTimers.toFake) - } -} - export function resolveConfig( mode: VitestRunMode, options: UserConfig, @@ -148,7 +78,6 @@ export function resolveConfig( options.environment = 'happy-dom' } - guardOptions(options) const resolved = { ...configDefaults,