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

  1. Add `export default` to the custom provider module exporting the provider factory object.
  2. If using a barrel/index, ensure the default is re-exported (`export { default } from './provider'`).
  3. 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

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


AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03). Data as JSON: /data/errors/90956d0183214b91.json. Report an issue: GitHub.