/
custom-provider.ts
75 lines (55 loc) · 2.08 KB
/
custom-provider.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import { existsSync, mkdirSync, rmSync, writeFileSync } from 'fs'
import type { AfterSuiteRunMeta, CoverageProvider, CoverageProviderModule, ReportContext, ResolvedCoverageOptions, Vitest } from 'vitest'
import { normalizeFilename } from './coverage-report-tests/utils'
const CustomCoverageProviderModule: CoverageProviderModule = {
getProvider(): CoverageProvider {
return new CustomCoverageProvider()
},
takeCoverage() {
return { customCoverage: 'Coverage report passed from workers to main thread' }
},
}
/**
* Provider that simply keeps track of the functions that were called
*/
class CustomCoverageProvider implements CoverageProvider {
name = 'custom-coverage-provider'
options!: ResolvedCoverageOptions
calls: Set<string> = new Set()
transformedFiles: Set<string> = new Set()
initialize(ctx: Vitest) {
this.options = ctx.config.coverage
this.calls.add(`initialized ${ctx ? 'with' : 'without'} context`)
}
clean(force: boolean) {
this.calls.add(`clean ${force ? 'with' : 'without'} force`)
}
onBeforeFilesRun() {
this.calls.add('onBeforeFilesRun')
}
onAfterSuiteRun(meta: AfterSuiteRunMeta) {
this.calls.add(`onAfterSuiteRun with ${JSON.stringify(meta)}`)
}
reportCoverage(reportContext?: ReportContext) {
this.calls.add(`reportCoverage with ${JSON.stringify(reportContext)}`)
const jsonReport = JSON.stringify({
calls: Array.from(this.calls.values()),
transformedFiles: Array.from(this.transformedFiles.values()).sort(),
}, null, 2)
if (existsSync('./coverage'))
rmSync('./coverage', { maxRetries: 10, recursive: true })
mkdirSync('./coverage')
writeFileSync('./coverage/custom-coverage-provider-report.json', jsonReport, 'utf-8')
}
onFileTransform(code: string, id: string) {
const filename = normalizeFilename(id).split('?')[0]
if (/\/src\//.test(filename))
this.transformedFiles.add(filename)
return { code }
}
resolveOptions(): ResolvedCoverageOptions {
this.calls.add('resolveOptions')
return this.options
}
}
export default CustomCoverageProviderModule