vitest-dev/vitest · error · Error
Custom CoverageProviderModule loaded from ${options.customPr
Error message
Custom CoverageProviderModule loaded from ${options.customProviderModule} was not the default export What it means
After successfully importing a custom coverage provider module (coverage.ts:96-100), Vitest requires its default export to be defined. If the module loads but `customProviderModule.default` is null/undefined, this error is thrown — the file exists and imports but does not export the expected default provider.
Source
Thrown at packages/vitest/src/utils/coverage.ts:97
}
return coverageModule
}
let customProviderModule
try {
customProviderModule = await loader.import(options.customProviderModule!)
}
catch (error) {
throw new Error(
`Failed to load custom CoverageProviderModule from ${options.customProviderModule}`,
{ cause: error },
)
}
if (customProviderModule.default == null) {
throw new Error(
`Custom CoverageProviderModule loaded from ${options.customProviderModule} was not the default export`,
)
}
return customProviderModule.default
}
View on GitHub (pinned to d568f8ce37)
Solutions
- Add `export default` to the custom provider module exporting the provider factory object.
- If using a barrel/index, ensure the default is re-exported (`export { default } from './provider'`).
- Confirm the default export is the provider object (with getProvider), not undefined.
Example fix
// before: named export only
export const provider = { getProvider: () => new MyProvider() }
// after: default export
export default { getProvider: () => new MyProvider() } Defensive patterns
Strategy: type-guard
Type guard
function hasDefaultExport(mod: unknown): mod is { default: NonNullable<unknown> } {
return !!mod && typeof mod === 'object' && (mod as any).default != null
} Prevention
- Always `export default` the provider object from a custom coverage module.
- When re-exporting through a barrel, preserve the default explicitly.
- Write a tiny test that imports the module and asserts default is defined.
When it happens
Trigger: A custom provider module that uses named exports only, forgets `export default`, or assigns default to undefined. The import succeeds so error 394 is not hit, but the shape check at line 96 fails.
Common situations: Authoring a custom CoverageProviderModule and using `export const provider = ...` instead of `export default`; a barrel file that re-exports but drops the default; converting a CJS module to ESM and losing the default export.
Related errors
- The vcsProvider module '${vcsProvider}' doesn't have a defau
- Benchmark provider loaded from "${provider}" did not have a
- Failed to load custom CoverageProviderModule from ${options.
- "Istanbul" coverage provider is not compatible with "experim
- You cannot set "coverage.reportsDirectory" as ${reportsDirec
AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03).
Data as JSON: /data/errors/90956d0183214b91.json.
Report an issue: GitHub.