vitest-dev/vitest · error · Error
BaseReporter's createCoverageMap was not overwritten
Error message
BaseReporter's createCoverageMap was not overwritten
What it means
BaseReporter.createCoverageMap() (coverage.ts:248) is an abstract-style stub — the base class cannot build a coverage map, so it always throws. Concrete coverage reporters (Istanbul/V8) override it; the error only surfaces when a custom subclass forgets to.
Source
Thrown at packages/vitest/src/node/coverage.ts:248
}
return includedFiles.map(file => slash(path.resolve(root, file)))
}
async getUntestedFiles(testedFiles: string[]): Promise<string[]> {
if (this.options.include == null) {
return []
}
const rootMapper = this.getUntestedFilesByRoot.bind(this, testedFiles, this.options.include)
const matrix = await Promise.all(this.roots.map(rootMapper))
return matrix.flatMap(files => files)
}
createCoverageMap(): CoverageMap {
throw new Error('BaseReporter\'s createCoverageMap was not overwritten')
}
async generateReports(_: CoverageMap, __: boolean | undefined): Promise<void> {
throw new Error('BaseReporter\'s generateReports was not overwritten')
}
async parseConfigModule(_: string): Promise<{ generate: () => { code: string } }> {
throw new Error('BaseReporter\'s parseConfigModule was not overwritten')
}
resolveOptions(): ResolvedCoverageOptions {
return this.options
}
async clean(clean = true): Promise<void> {
await this.reportsDirectoryLock.acquire()
if (clean && existsSync(this.options.reportsDirectory)) {View on GitHub (pinned to d568f8ce37)
Solutions
- Implement createCoverageMap(): CoverageMap in your custom reporter subclass.
- Extend a concrete reporter (e.g. IstanbulReporter / V8Reporter) instead of the abstract base.
- Mirror the contract from the built-in reporters in packages/coverage-*.
Example fix
// before
class MyReporter extends BaseReporter {}
// mergeReports calls createCoverageMap() -> throws
// after
class MyReporter extends BaseReporter {
createCoverageMap(): CoverageMap { return new CoverageMap() }
} Defensive patterns
Strategy: type-guard
Validate before calling
if (typeof reporter.createCoverageMap !== 'function'
|| reporter.createCoverageMap === BaseReporter.prototype.createCoverageMap) {
throw new Error('Custom reporter must override createCoverageMap')
} Type guard
function overridesCreateCoverageMap(r: BaseReporter): boolean {
return r.createCoverageMap !== BaseReporter.prototype.createCoverageMap
} Prevention
- Implement all required overrides when subclassing BaseReporter.
- Prefer extending a concrete reporter (V8/Istanbul).
- Add a unit test that exercises the coverage merge path for custom reporters.
When it happens
Trigger: A custom coverage reporter that extends BaseReporter without implementing createCoverageMap, exercised during the mergeReports/coverage-aggregation flow that calls it.
Common situations: Writing a custom coverage reporter and missing a required override; instantiating BaseReporter directly instead of a concrete reporter.
Related errors
- BaseReporter's generateReports was not overwritten
- BaseReporter's parseConfigModule was not overwritten
- Something removed the coverage directory "${coverageFilesDir
- Something removed the coverage directory "${coverageFilesDir
- V8 provider missing inspector session.
AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03).
Data as JSON: /data/errors/a856c5d97245d13e.json.
Report an issue: GitHub.