[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
test testing-tools vite
12

Configure Feed

Select the types of activity you want to include in your feed.

fix(coverage): workspaces c8 source maps (#3226)

authored by

Ari Perkkiö and committed by
GitHub
(Apr 27, 2023, 8:19 AM +0200) efce3b4d 8d4606eb

+57 -3
+6
pnpm-lock.yaml
··· 1798 1798 1799 1799 test/workspaces: 1800 1800 devDependencies: 1801 + '@types/istanbul-lib-coverage': 1802 + specifier: ^2.0.4 1803 + version: 2.0.4 1804 + istanbul-lib-coverage: 1805 + specifier: ^3.2.0 1806 + version: 3.2.0 1801 1807 jsdom: 1802 1808 specifier: latest 1803 1809 version: 21.1.1
+5 -2
test/workspaces/package.json
··· 3 3 "type": "module", 4 4 "private": true, 5 5 "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" 8 9 }, 9 10 "devDependencies": { 11 + "@types/istanbul-lib-coverage": "^2.0.4", 12 + "istanbul-lib-coverage": "^3.2.0", 10 13 "jsdom": "latest", 11 14 "vitest": "workspace:*" 12 15 }
+1
test/workspaces/vitest.config.ts
··· 9 9 export default defineConfig({ 10 10 test: { 11 11 coverage: { 12 + enabled: true, 12 13 all: true, 13 14 }, 14 15 reporters: ['default', 'json'],
+5 -1
packages/coverage-c8/src/provider.ts
··· 100 100 const sourceMapMeta: Record<SourceMapMeta['url'], MapAndSource> = {} 101 101 const extensions = Array.isArray(this.options.extension) ? this.options.extension : [this.options.extension] 102 102 103 + const fetchCache = this.ctx.projects.map(project => 104 + Array.from(project.vitenode.fetchCache.entries()), 105 + ).flat() 106 + 103 107 const entries = Array 104 - .from(this.ctx.vitenode.fetchCache.entries()) 108 + .from(fetchCache) 105 109 .filter(entry => report._shouldInstrument(entry[0])) 106 110 .map(([file, { result }]) => { 107 111 if (!result.map)
+22
test/workspaces/coverage-report-tests/check-coverage.test.ts
··· 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 + })
+7
test/workspaces/coverage-report-tests/vitest.config.ts
··· 1 + import { defineConfig } from 'vitest/config' 2 + 3 + export default defineConfig({ 4 + test: { 5 + include: ['./check-coverage.test.ts'], 6 + }, 7 + })
+11
test/workspaces/src/math.ts
··· 1 + /* eslint-disable unused-imports/no-unused-vars */ 1 2 export function sum(a: number, b: number) { 3 + if (a === 3 && b === 4) { 4 + // This should be uncovered 5 + return 7 6 + } 7 + 2 8 return a + b 9 + } 10 + 11 + function uncoveredFunction() { 12 + // This should be uncovered 13 + return 1 3 14 }