Skip to content

Commit

Permalink
feat!: set 'v8' as default coverage.provider
Browse files Browse the repository at this point in the history
  • Loading branch information
AriPerkkio committed May 24, 2023
1 parent 78e3250 commit 85920b8
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 7 deletions.
2 changes: 1 addition & 1 deletion docs/config/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -664,7 +664,7 @@ If you are using coverage options with dot notation, don't forget to specify `--
#### coverage.provider

- **Type:** `'c8' | 'v8' | 'istanbul' | 'custom'`
- **Default:** `'c8'`
- **Default:** `'v8'`
- **CLI:** `--coverage.provider=<provider>`

Use `provider` to select the tool for coverage collection.
Expand Down
2 changes: 1 addition & 1 deletion docs/guide/coverage.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ The `c8` provider is being replaced by the [`v8`](https://v8.dev/blog/javascript
Since Vitest v0.22.0
:::

Both `v8` and `istanbul` support are optional. By default, `c8` will be used.
Both `v8` and `istanbul` support are optional. By default, `v8` will be used.

You can select the coverage tool by setting `test.coverage.provider` to `v8` or `istanbul`:

Expand Down
2 changes: 1 addition & 1 deletion packages/vitest/src/defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const defaultCoverageExcludes = [

// These are the generic defaults for coverage. Providers may also set some provider specific defaults.
export const coverageConfigDefaults: ResolvedCoverageOptions = {
provider: 'c8',
provider: 'v8',
enabled: false,
clean: true,
cleanOnRerun: true,
Expand Down
14 changes: 12 additions & 2 deletions packages/vitest/src/node/cli-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,21 @@ export async function startVitest(
const ctx = await createVitest(mode, options, viteOverrides)

if (mode === 'test' && ctx.config.coverage.enabled) {
const provider = ctx.config.coverage.provider || 'c8'
const provider = ctx.config.coverage.provider || 'v8'
const requiredPackages = CoverageProviderMap[provider]

if (requiredPackages) {
if (!await ensurePackageInstalled(requiredPackages, root)) {
// Remove this message once support for @vitest/coverage-c8 has been removed completely
const defaultProviderInfo = 'Default coverage provider has changed from "c8" to "v8". '
+ 'New package is required to be installed. '
+ 'To use the old deprecated coverage provider use "--coverage.provider c8" option.\n'
+ 'See https://github.com/vitest-dev/vitest/pull/3339 for more information.\n\n'

const isUsingDefaultProvider
= ctx.server.config.test?.coverage?.provider === undefined
&& options.coverage?.provider === undefined

if (!await ensurePackageInstalled(requiredPackages, root, isUsingDefaultProvider ? defaultProviderInfo : undefined)) {
process.exitCode = 1
return ctx
}
Expand Down
4 changes: 4 additions & 0 deletions packages/vitest/src/node/pkg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,16 @@ const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
export async function ensurePackageInstalled(
dependency: string,
root: string,
errorMessage?: string,
) {
if (isPackageExists(dependency, { paths: [root, __dirname] }))
return true

const promptInstall = !isCI && process.stdout.isTTY

if (errorMessage)
process.stderr.write(c.red(errorMessage))

process.stderr.write(c.red(`${c.inverse(c.red(' MISSING DEP '))} Can not find dependency '${dependency}'\n\n`))

if (!promptInstall)
Expand Down
4 changes: 2 additions & 2 deletions test/config/test/failures.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,13 @@ test('inspect-brk cannot be used with threads', async () => {
})

test('c8 coverage provider cannot be used with browser', async () => {
const { stderr } = await runVitest({ coverage: { enabled: true }, browser: { enabled: true, name: 'chrome' } })
const { stderr } = await runVitest({ coverage: { enabled: true, provider: 'c8' }, browser: { enabled: true, name: 'chrome' } })

expect(stderr).toMatch('Error: @vitest/coverage-c8 does not work with --browser. Use @vitest/coverage-istanbul instead')
})

test('v8 coverage provider cannot be used with browser', async () => {
const { stderr } = await runVitest({ coverage: { enabled: true, provider: 'v8' }, browser: { enabled: true, name: 'chrome' } })
const { stderr } = await runVitest({ coverage: { enabled: true }, browser: { enabled: true, name: 'chrome' } })

expect(stderr).toMatch('Error: @vitest/coverage-v8 does not work with --browser. Use @vitest/coverage-istanbul instead')
})
Expand Down

0 comments on commit 85920b8

Please sign in to comment.