From 4e655268c958c9c49cf3516b096b3244f56ed998 Mon Sep 17 00:00:00 2001 From: AriPerkkio Date: Fri, 21 Jul 2023 09:22:24 +0300 Subject: [PATCH] fix(coverage): exclude vite virtual files by default --- docs/config/index.md | 1 + packages/vitest/src/defaults.ts | 1 + .../coverage-report-tests/generic.report.test.ts | 8 ++++++++ test/coverage-test/test/coverage.test.ts | 7 +++++++ test/coverage-test/vitest.config.ts | 16 ++++++++++++++++ 5 files changed, 33 insertions(+) diff --git a/docs/config/index.md b/docs/config/index.md index 30e83dacbc33..d350291a7b13 100644 --- a/docs/config/index.md +++ b/docs/config/index.md @@ -720,6 +720,7 @@ List of files included in coverage as glob patterns 'dist/**', 'packages/*/test?(s)/**', '**/*.d.ts', + '**/virtual:*', 'cypress/**', 'test?(s)/**', 'test?(-*).?(c|m)[jt]s?(x)', diff --git a/packages/vitest/src/defaults.ts b/packages/vitest/src/defaults.ts index 10040a9486dc..a0556dfada3f 100644 --- a/packages/vitest/src/defaults.ts +++ b/packages/vitest/src/defaults.ts @@ -15,6 +15,7 @@ const defaultCoverageExcludes = [ 'dist/**', 'packages/*/test?(s)/**', '**/*.d.ts', + '**/virtual:*', 'cypress/**', 'test?(s)/**', 'test?(-*).?(c|m)[jt]s?(x)', diff --git a/test/coverage-test/coverage-report-tests/generic.report.test.ts b/test/coverage-test/coverage-report-tests/generic.report.test.ts index c9b62ddce129..1da66bc6a6c5 100644 --- a/test/coverage-test/coverage-report-tests/generic.report.test.ts +++ b/test/coverage-test/coverage-report-tests/generic.report.test.ts @@ -101,3 +101,11 @@ test('coverage provider does not conflict with built-in reporter\'s outputFile', expect(files).toContain('junit.xml') }) + +test('virtual files should be excluded', () => { + const files = fs.readdirSync(resolve('./coverage')) + const srcFiles = fs.readdirSync(resolve('./coverage/src')) + + for (const file of [...files, ...srcFiles]) + expect(file).not.toContain('virtual:') +}) diff --git a/test/coverage-test/test/coverage.test.ts b/test/coverage-test/test/coverage.test.ts index 6d3e20f399a3..8d841ae26312 100644 --- a/test/coverage-test/test/coverage.test.ts +++ b/test/coverage-test/test/coverage.test.ts @@ -1,4 +1,7 @@ import { expect, test } from 'vitest' + +// @ts-expect-error -- untyped virtual file provided by custom plugin +import virtualFile from 'virtual:vitest-custom-virtual-file' import { implicitElse } from '../src/implicitElse' import { useImportEnv } from '../src/importEnv' import { second } from '../src/function-count' @@ -40,3 +43,7 @@ test.skipIf(skipDynamicFiles)('run dynamic ESM file', async () => { test.skipIf(skipDynamicFiles)('run dynamic CJS file', async () => { await runDynamicFileCJS() }) + +test('virtual file import', () => { + expect(virtualFile).toBe('This file should be excluded from coverage report') +}) diff --git a/test/coverage-test/vitest.config.ts b/test/coverage-test/vitest.config.ts index 0eb103425292..52f79a0fb820 100644 --- a/test/coverage-test/vitest.config.ts +++ b/test/coverage-test/vitest.config.ts @@ -7,6 +7,22 @@ const provider = process.argv[1 + process.argv.indexOf('--provider')] export default defineConfig({ plugins: [ vue(), + { + // Simulates Vite's virtual files: https://vitejs.dev/guide/api-plugin.html#virtual-modules-convention + name: 'vitest-custom-virtual-files', + resolveId(id) { + if (id === 'virtual:vitest-custom-virtual-file') + return 'src/virtual:vitest-custom-virtual-file.ts' + }, + load(id) { + if (id === 'src/virtual:vitest-custom-virtual-file.ts') { + return ` + const virtualFile = "This file should be excluded from coverage report" + export default virtualFile; + ` + } + }, + }, ], define: { MY_CONSTANT: '"my constant"',