From 9defb9c823ca3377db48c9ce3b33793001070cca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ari=20Perkki=C3=B6?= Date: Thu, 8 May 2025 13:28:09 +0200 Subject: [PATCH 1/2] fix(coverage): browser + v8 in source tests missing --- packages/coverage-v8/src/browser.ts | 4 ---- packages/coverage-v8/src/provider.ts | 3 +++ test/coverage-test/fixtures/src/in-source.ts | 17 +++++++++++++++ test/coverage-test/test/in-source.test.ts | 21 +++++++++++++++++++ test/coverage-test/vitest.workspace.custom.ts | 2 ++ 5 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 test/coverage-test/fixtures/src/in-source.ts create mode 100644 test/coverage-test/test/in-source.test.ts diff --git a/packages/coverage-v8/src/browser.ts b/packages/coverage-v8/src/browser.ts index 9c9dc6344740..e1a668df7b2d 100644 --- a/packages/coverage-v8/src/browser.ts +++ b/packages/coverage-v8/src/browser.ts @@ -71,9 +71,5 @@ function filterResult(coverage: ScriptCoverage['result'][number]): boolean { return false } - if (coverage.url.includes('?browserv=') || coverage.url.includes('&browserv=')) { - return false - } - return true } diff --git a/packages/coverage-v8/src/provider.ts b/packages/coverage-v8/src/provider.ts index 920299009026..a56953ade317 100644 --- a/packages/coverage-v8/src/provider.ts +++ b/packages/coverage-v8/src/provider.ts @@ -399,6 +399,9 @@ export class V8CoverageProvider extends BaseCoverageProvider + +export function add(a: number, b: number) { + if(a === 5 && b === 7) { + return 12; + } + + return a + b +} + +if (import.meta.vitest) { + const { test, expect } = import.meta.vitest + + test('in source test running add function', () => { + expect(add(10, 19)).toBe(29) + }) +} diff --git a/test/coverage-test/test/in-source.test.ts b/test/coverage-test/test/in-source.test.ts new file mode 100644 index 000000000000..8d8c042704a3 --- /dev/null +++ b/test/coverage-test/test/in-source.test.ts @@ -0,0 +1,21 @@ +import { expect } from 'vitest' +import { readCoverageMap, runVitest, test } from '../utils' + +test('in-source tests work', async () => { + const { stdout } = await runVitest({ + include: [], + includeSource: ['fixtures/src/in-source.ts'], + coverage: { all: false, reporter: 'json' }, + }) + + expect(stdout).toContain('in source test running add function') + + const coverageMap = await readCoverageMap() + const files = coverageMap.files() + + expect(files).toMatchInlineSnapshot(` + [ + "/fixtures/src/in-source.ts", + ] + `) +}) diff --git a/test/coverage-test/vitest.workspace.custom.ts b/test/coverage-test/vitest.workspace.custom.ts index 809766ac0d20..9b69a10d698d 100644 --- a/test/coverage-test/vitest.workspace.custom.ts +++ b/test/coverage-test/vitest.workspace.custom.ts @@ -100,6 +100,7 @@ export default defineWorkspace([ '**/temporary-files.test.ts', '**/test-reporter-conflicts.test.ts', '**/vue.test.ts', + '**/in-source.test.ts', ], }, }, @@ -126,6 +127,7 @@ export default defineWorkspace([ '**/temporary-files.test.ts', '**/test-reporter-conflicts.test.ts', '**/vue.test.ts', + '**/in-source.test.ts', ], }, }, From c5e4c24d0c9aaca975a028a13df34ce5ebf509d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ari=20Perkki=C3=B6?= Date: Wed, 21 May 2025 17:49:15 +0300 Subject: [PATCH 2/2] fix(browser): source maps of in-source tests --- packages/browser/src/node/plugin.ts | 6 +++-- test/coverage-test/test/in-source.test.ts | 28 ++++++++++++++++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/packages/browser/src/node/plugin.ts b/packages/browser/src/node/plugin.ts index 987785ce0197..0200de4fa77b 100644 --- a/packages/browser/src/node/plugin.ts +++ b/packages/browser/src/node/plugin.ts @@ -382,11 +382,13 @@ export default (parentServer: ParentBrowserProject, base = '/'): Plugin[] => { { name: 'vitest:browser:in-source-tests', transform(code, id) { + const filename = cleanUrl(id) const project = parentServer.vitest.getProjectByName(parentServer.config.name) - if (!project._isCachedTestFile(id) || !code.includes('import.meta.vitest')) { + + if (!project._isCachedTestFile(filename) || !code.includes('import.meta.vitest')) { return } - const s = new MagicString(code, { filename: cleanUrl(id) }) + const s = new MagicString(code, { filename }) s.prepend( `import.meta.vitest = __vitest_index__;\n`, ) diff --git a/test/coverage-test/test/in-source.test.ts b/test/coverage-test/test/in-source.test.ts index 8d8c042704a3..52e771fa33d3 100644 --- a/test/coverage-test/test/in-source.test.ts +++ b/test/coverage-test/test/in-source.test.ts @@ -1,5 +1,5 @@ import { expect } from 'vitest' -import { readCoverageMap, runVitest, test } from '../utils' +import { isV8Provider, readCoverageMap, runVitest, test } from '../utils' test('in-source tests work', async () => { const { stdout } = await runVitest({ @@ -18,4 +18,30 @@ test('in-source tests work', async () => { "/fixtures/src/in-source.ts", ] `) + + const fileCoverage = coverageMap.fileCoverageFor('/fixtures/src/in-source.ts') + + // If-branch is not taken - makes sure source maps are correct in in-source testing too + expect(fileCoverage.getUncoveredLines()).toContain('5') + + if (isV8Provider()) { + expect(fileCoverage).toMatchInlineSnapshot(` + { + "branches": "2/4 (50%)", + "functions": "1/1 (100%)", + "lines": "10/12 (83.33%)", + "statements": "10/12 (83.33%)", + } + `) + } + else { + expect(fileCoverage).toMatchInlineSnapshot(` + { + "branches": "3/6 (50%)", + "functions": "2/2 (100%)", + "lines": "6/7 (85.71%)", + "statements": "6/7 (85.71%)", + } + `) + } })