Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit dc27e17

Browse filesBrowse files
clydinalan-agius4
authored andcommitted
fix(@angular/build): inherit preserveSymlinks option from build target in unit-test builder
The unit-test builder did not pass the preserveSymlinks configuration to Vitest's custom configuration plugin and resolved it directly from buildTargetOptions in Karma executor without considering process arguments. This caused module resolution failures in unit tests for symlinked packages. This change inherits preserveSymlinks from the referenced buildTarget options, falling back to process.execArgv if not defined. The resolved value is then successfully forwarded to the underlying bundlers and executors (Karma and Vitest).
1 parent 8ef83be commit dc27e17
Copy full SHA for dc27e17

5 files changed

+10-1Lines changed: 10 additions & 1 deletion

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎packages/angular/build/src/builders/unit-test/builder.ts‎

Copy file name to clipboardExpand all lines: packages/angular/build/src/builders/unit-test/builder.ts
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,10 @@ export async function* execute(
286286
return;
287287
}
288288

289+
// Resolve final preserveSymlinks option
290+
normalizedOptions.preserveSymlinks =
291+
buildTargetOptions.preserveSymlinks ?? process.execArgv.includes('--preserve-symlinks');
292+
289293
// Get runner-specific build options
290294
let runnerBuildOptions;
291295
let virtualFiles;
@@ -327,6 +331,7 @@ export async function* execute(
327331
progress: normalizedOptions.buildProgress ?? buildTargetOptions.progress,
328332
quiet: normalizedOptions.quiet,
329333
...(normalizedOptions.tsConfig ? { tsConfig: normalizedOptions.tsConfig } : {}),
334+
preserveSymlinks: normalizedOptions.preserveSymlinks,
330335
} satisfies ApplicationBuilderInternalOptions;
331336

332337
const dumpDirectory = normalizedOptions.dumpVirtualFiles
Collapse file

‎packages/angular/build/src/builders/unit-test/options.ts‎

Copy file name to clipboardExpand all lines: packages/angular/build/src/builders/unit-test/options.ts
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ export async function normalizeOptions(
134134
: [],
135135
dumpVirtualFiles: options.dumpVirtualFiles,
136136
listTests: options.listTests,
137+
preserveSymlinks: undefined as boolean | undefined,
137138
runnerConfig:
138139
typeof runnerConfig === 'string'
139140
? runnerConfig.length === 0
Collapse file

‎packages/angular/build/src/builders/unit-test/runners/karma/executor.ts‎

Copy file name to clipboardExpand all lines: packages/angular/build/src/builders/unit-test/runners/karma/executor.ts
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export class KarmaExecutor implements TestExecutor {
9191
progress: unitTestOptions.buildProgress ?? buildTargetOptions.progress,
9292
watch: unitTestOptions.watch,
9393
poll: buildTargetOptions.poll,
94-
preserveSymlinks: buildTargetOptions.preserveSymlinks,
94+
preserveSymlinks: unitTestOptions.preserveSymlinks,
9595
browsers: unitTestOptions.browsers?.join(','),
9696
codeCoverage: unitTestOptions.coverage.enabled,
9797
codeCoverageExclude: unitTestOptions.coverage.exclude,
Collapse file

‎packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts‎

Copy file name to clipboardExpand all lines: packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ export class VitestExecutor implements TestExecutor {
382382
include,
383383
watch,
384384
isolate: this.options.isolate,
385+
preserveSymlinks: this.options.preserveSymlinks,
385386
}),
386387
],
387388
};
Collapse file

‎packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts‎

Copy file name to clipboardExpand all lines: packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ interface VitestConfigPluginOptions {
5656
optimizeDepsInclude: string[];
5757
watch: boolean;
5858
isolate: boolean | undefined;
59+
preserveSymlinks?: boolean;
5960
}
6061

6162
async function findTestEnvironment(
@@ -259,6 +260,7 @@ export async function createVitestConfigPlugin(
259260
resolve: {
260261
mainFields: ['es2020', 'module', 'main'],
261262
conditions: ['es2015', 'es2020', 'module', ...(browser ? ['browser'] : [])],
263+
preserveSymlinks: options.preserveSymlinks,
262264
},
263265
};
264266

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.