Skip to content

Commit 71b5e2c

Browse files
ASAS
authored andcommitted
fix: handle function-based Vitest configs in coverage plugin
1 parent 72b6379 commit 71b5e2c

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,6 @@ Thumbs.db
4848

4949
# Nx workspace cache
5050
.nx
51+
52+
# Bundled Vitest configuration files
53+
**/*.bundled_*.mjs

packages/core/vitest.int.config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ export default defineConfig(() => {
1414
setupFiles: [
1515
'../../testing/test-setup/src/lib/console.mock.ts',
1616
'../../testing/test-setup/src/lib/reset.mocks.ts',
17-
'../../testing/test-setup/src/lib/portal-client.mock.ts',
1817
],
1918
coverage: {
2019
...baseConfig.test.coverage,

packages/plugin-coverage/src/lib/nx/coverage-paths.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,19 @@ export async function getCoveragePathForVitest(
128128
);
129129
}
130130

131-
const vitestConfig = await importModule<VitestCoverageConfig>({
131+
const vitestConfigModule = await importModule<
132+
VitestCoverageConfig & { default?: unknown }
133+
>({
132134
filepath: config,
133135
format: 'esm',
134136
});
135137

138+
const vitestConfig = await extractVitestConfig(
139+
vitestConfigModule,
140+
target,
141+
project.name || 'unknown',
142+
);
143+
136144
const reportsDirectory =
137145
options.reportsDirectory ?? vitestConfig.test.coverage?.reportsDirectory;
138146
const reporter = vitestConfig.test.coverage?.reporter;
@@ -158,6 +166,28 @@ export async function getCoveragePathForVitest(
158166
};
159167
}
160168

169+
async function extractVitestConfig(
170+
vitestConfigModule: VitestCoverageConfig & { default?: unknown },
171+
target: string,
172+
projectName: string,
173+
): Promise<VitestCoverageConfig> {
174+
if (typeof vitestConfigModule.default === 'function') {
175+
try {
176+
const result = vitestConfigModule.default();
177+
if (result && typeof result === 'object' && result.test?.coverage) {
178+
return result as VitestCoverageConfig;
179+
}
180+
throw new Error('Function export did not return valid configuration');
181+
} catch (error) {
182+
throw new Error(
183+
`Could not execute Vitest config function for target ${target} in project ${projectName}: ${error}`,
184+
);
185+
}
186+
}
187+
188+
return vitestConfigModule;
189+
}
190+
161191
export async function getCoveragePathForJest(
162192
options: JestExecutorOptions,
163193
project: ProjectConfiguration,

0 commit comments

Comments
 (0)