fix(vite): load the correct config file from @nx/vite:test executor (#27514)
This PR ensures that we pass Vite config file to the programmatic `startTest` API from Vitest. It fixes the issue with plugins not loading as well as other issues with the config file not being used. This mainly affects a custom `configFile` option being passed to the executor. The previous fix to additionally load in `plugins` via overrides is causing plugins to load twice when the Vite config file is picked up by Vitest (e.g. #27500). ## Current Behavior <!-- This is the behavior we have today --> ## Expected Behavior <!-- This is the behavior we should expect with the changes in this PR --> ## Related Issue(s) <!-- Please link the issue being fixed so it gets closed when this is merged. --> Fixes #27500, #22001
This commit is contained in:
parent
0de28ccfe1
commit
402bae2ce1
@ -11,7 +11,7 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"configFile": {
|
"configFile": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "The path to the local vitest config",
|
"description": "The path to the local vitest config, relative to the workspace root.",
|
||||||
"x-completion-type": "file",
|
"x-completion-type": "file",
|
||||||
"x-completion-glob": "@(vitest|vite).config@(.js|.ts)",
|
"x-completion-glob": "@(vitest|vite).config@(.js|.ts)",
|
||||||
"aliases": ["config"]
|
"aliases": ["config"]
|
||||||
|
|||||||
45
e2e/vue/src/vue-legacy.test.ts
Normal file
45
e2e/vue/src/vue-legacy.test.ts
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import { cleanupProject, newProject, runCLI, uniq } from '@nx/e2e/utils';
|
||||||
|
|
||||||
|
describe('Vue Plugin (legacy)', () => {
|
||||||
|
let proj: string;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
proj = newProject({
|
||||||
|
packages: ['@nx/vue'],
|
||||||
|
unsetProjectNameAndRootFormat: false,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => cleanupProject());
|
||||||
|
|
||||||
|
it('should serve application in dev mode', async () => {
|
||||||
|
const app = uniq('app');
|
||||||
|
|
||||||
|
runCLI(
|
||||||
|
`generate @nx/vue:app ${app} --unitTestRunner=vitest --e2eTestRunner=playwright`,
|
||||||
|
{ env: { NX_ADD_PLUGINS: 'false' } }
|
||||||
|
);
|
||||||
|
let result = runCLI(`test ${app}`);
|
||||||
|
expect(result).toContain(`Successfully ran target test for project ${app}`);
|
||||||
|
|
||||||
|
result = runCLI(`build ${app}`);
|
||||||
|
expect(result).toContain(
|
||||||
|
`Successfully ran target build for project ${app}`
|
||||||
|
);
|
||||||
|
}, 200_000);
|
||||||
|
|
||||||
|
it('should build library', async () => {
|
||||||
|
const lib = uniq('lib');
|
||||||
|
|
||||||
|
runCLI(
|
||||||
|
`generate @nx/vue:lib ${lib} --bundler=vite --unitTestRunner=vitest`,
|
||||||
|
|
||||||
|
{ env: { NX_ADD_PLUGINS: 'false' } }
|
||||||
|
);
|
||||||
|
|
||||||
|
const result = runCLI(`build ${lib}`);
|
||||||
|
expect(result).toContain(
|
||||||
|
`Successfully ran target build for project ${lib}`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -75,13 +75,10 @@ export async function getOptions(
|
|||||||
// This should not be needed as it's going to be set in vite.config.ts
|
// This should not be needed as it's going to be set in vite.config.ts
|
||||||
// but leaving it here in case someone did not migrate correctly
|
// but leaving it here in case someone did not migrate correctly
|
||||||
root: resolved.config.root ?? root,
|
root: resolved.config.root ?? root,
|
||||||
configFile: viteConfigPath,
|
config: viteConfigPath,
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return mergeConfig(resolved?.config?.['test'] ?? {}, settings);
|
||||||
resolvedOptions: mergeConfig(resolved?.config?.['test'] ?? {}, settings),
|
|
||||||
plugins: resolved?.config?.plugins,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getOptionsAsArgv(obj: Record<string, any>): string[] {
|
export function getOptionsAsArgv(obj: Record<string, any>): string[] {
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"configFile": {
|
"configFile": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "The path to the local vitest config",
|
"description": "The path to the local vitest config, relative to the workspace root.",
|
||||||
"x-completion-type": "file",
|
"x-completion-type": "file",
|
||||||
"x-completion-glob": "@(vitest|vite).config@(.js|.ts)",
|
"x-completion-glob": "@(vitest|vite).config@(.js|.ts)",
|
||||||
"aliases": ["config"]
|
"aliases": ["config"]
|
||||||
|
|||||||
@ -19,7 +19,7 @@ export async function* vitestExecutor(
|
|||||||
// Allows ESM to be required in CJS modules. Vite will be published as ESM in the future.
|
// Allows ESM to be required in CJS modules. Vite will be published as ESM in the future.
|
||||||
const { startVitest } = await loadVitestDynamicImport();
|
const { startVitest } = await loadVitestDynamicImport();
|
||||||
|
|
||||||
const { resolvedOptions, plugins } =
|
const resolvedOptions =
|
||||||
(await getOptions(options, context, projectRoot)) ?? {};
|
(await getOptions(options, context, projectRoot)) ?? {};
|
||||||
|
|
||||||
const watch = resolvedOptions['watch'] === true;
|
const watch = resolvedOptions['watch'] === true;
|
||||||
@ -37,8 +37,7 @@ export async function* vitestExecutor(
|
|||||||
const ctx = await startVitest(
|
const ctx = await startVitest(
|
||||||
resolvedOptions['mode'] ?? 'test',
|
resolvedOptions['mode'] ?? 'test',
|
||||||
cliFilters,
|
cliFilters,
|
||||||
resolvedOptions,
|
resolvedOptions
|
||||||
{ plugins }
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let hasErrors = false;
|
let hasErrors = false;
|
||||||
|
|||||||
@ -18,7 +18,7 @@ export function normalizeViteConfigFilePath(
|
|||||||
configFile?: string
|
configFile?: string
|
||||||
): string | undefined {
|
): string | undefined {
|
||||||
if (configFile) {
|
if (configFile) {
|
||||||
const normalized = joinPathFragments(configFile);
|
const normalized = joinPathFragments(contextRoot, configFile);
|
||||||
if (!existsSync(normalized)) {
|
if (!existsSync(normalized)) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Could not find vite config at provided path "${normalized}".`
|
`Could not find vite config at provided path "${normalized}".`
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user