Skip to content

Commit efce3b4

Browse files
authored
fix(coverage): workspaces c8 source maps (#3226)
1 parent 8d4606e commit efce3b4

File tree

7 files changed

+57
-3
lines changed

7 files changed

+57
-3
lines changed

packages/coverage-c8/src/provider.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,12 @@ export class C8CoverageProvider extends BaseCoverageProvider implements Coverage
100100
const sourceMapMeta: Record<SourceMapMeta['url'], MapAndSource> = {}
101101
const extensions = Array.isArray(this.options.extension) ? this.options.extension : [this.options.extension]
102102

103+
const fetchCache = this.ctx.projects.map(project =>
104+
Array.from(project.vitenode.fetchCache.entries()),
105+
).flat()
106+
103107
const entries = Array
104-
.from(this.ctx.vitenode.fetchCache.entries())
108+
.from(fetchCache)
105109
.filter(entry => report._shouldInstrument(entry[0]))
106110
.map(([file, { result }]) => {
107111
if (!result.map)

pnpm-lock.yaml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { existsSync, readFileSync } from 'node:fs'
2+
import { normalize } from 'node:path'
3+
import { expect, test } from 'vitest'
4+
import libCoverage from 'istanbul-lib-coverage'
5+
import { resolve } from 'pathe'
6+
7+
test('coverage exists', () => {
8+
expect(existsSync('./coverage')).toBe(true)
9+
expect(existsSync('./coverage/index.html')).toBe(true)
10+
})
11+
12+
test('file coverage summary matches', () => {
13+
const coverageJson = JSON.parse(readFileSync('./coverage/coverage-final.json', 'utf-8'))
14+
const coverageMap = libCoverage.createCoverageMap(coverageJson)
15+
const fileCoverage = coverageMap.fileCoverageFor(normalize(resolve('./src/math.ts')))
16+
17+
// There should be 1 uncovered branch and 1 uncovered function. See math.ts.
18+
const { branches, functions } = fileCoverage.toSummary()
19+
20+
expect(branches.total - branches.covered).toBe(1)
21+
expect(functions.total - functions.covered).toBe(1)
22+
})
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { defineConfig } from 'vitest/config'
2+
3+
export default defineConfig({
4+
test: {
5+
include: ['./check-coverage.test.ts'],
6+
},
7+
})

test/workspaces/package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
"type": "module",
44
"private": true,
55
"scripts": {
6-
"test": "vitest",
7-
"coverage": "vitest run --coverage"
6+
"test": "pnpm test:workspace && pnpm test:coverage",
7+
"test:workspace": "vitest run",
8+
"test:coverage": "vitest run --root coverage-report-tests"
89
},
910
"devDependencies": {
11+
"@types/istanbul-lib-coverage": "^2.0.4",
12+
"istanbul-lib-coverage": "^3.2.0",
1013
"jsdom": "latest",
1114
"vitest": "workspace:*"
1215
}

test/workspaces/src/math.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
/* eslint-disable unused-imports/no-unused-vars */
12
export function sum(a: number, b: number) {
3+
if (a === 3 && b === 4) {
4+
// This should be uncovered
5+
return 7
6+
}
7+
28
return a + b
39
}
10+
11+
function uncoveredFunction() {
12+
// This should be uncovered
13+
return 1
14+
}

test/workspaces/vitest.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ if (process.env.TEST_WATCH) {
99
export default defineConfig({
1010
test: {
1111
coverage: {
12+
enabled: true,
1213
all: true,
1314
},
1415
reporters: ['default', 'json'],

0 commit comments

Comments
 (0)