From 560d478d9d46dea3d4b368697d67c2f8e475249c Mon Sep 17 00:00:00 2001 From: dominikg Date: Thu, 27 Jan 2022 16:24:53 +0100 Subject: [PATCH 1/2] feat: merge viteConfig.test in configResolved to allow vitest plugins to modify it in their config hook --- packages/vitest/src/node/plugins/index.ts | 18 +++++++++++++----- .../another-vite-instance.ts | 0 .../default-export.js | 0 .../named-exports.js | 0 .../{setupFiles => globalSetup}/server.ts | 0 .../ts-with-imports.ts | 0 .../setupFiles/add-something-to-global.ts | 11 +++++++++++ test/global-setup/test/setup-files.test.ts | 6 ++++++ test/global-setup/vitest.config.ts | 14 ++++++++++---- 9 files changed, 40 insertions(+), 9 deletions(-) rename test/global-setup/{setupFiles => globalSetup}/another-vite-instance.ts (100%) rename test/global-setup/{setupFiles => globalSetup}/default-export.js (100%) rename test/global-setup/{setupFiles => globalSetup}/named-exports.js (100%) rename test/global-setup/{setupFiles => globalSetup}/server.ts (100%) rename test/global-setup/{setupFiles => globalSetup}/ts-with-imports.ts (100%) create mode 100644 test/global-setup/setupFiles/add-something-to-global.ts create mode 100644 test/global-setup/test/setup-files.test.ts diff --git a/packages/vitest/src/node/plugins/index.ts b/packages/vitest/src/node/plugins/index.ts index 922e69270863..9b94688258cf 100644 --- a/packages/vitest/src/node/plugins/index.ts +++ b/packages/vitest/src/node/plugins/index.ts @@ -19,8 +19,11 @@ export async function VitestPlugin(options: UserConfig = {}, ctx = new Vitest()) name: 'vitest', enforce: 'pre', config(viteConfig: any) { - options = deepMerge(options, viteConfig.test || {}) - options.api = resolveApiConfig(options) + // preliminary merge of options to be able to create server options for vite + // however to allow vitest plugins to modify vitest config values + // this is repeated in configResolved where the config is final + const preOptions = deepMerge(options, viteConfig.test || {}) + preOptions.api = resolveApiConfig(preOptions) return { clearScreen: false, resolve: { @@ -29,9 +32,9 @@ export async function VitestPlugin(options: UserConfig = {}, ctx = new Vitest()) mainFields: [], }, server: { - ...options.api, - open: options.ui && options.open - ? options.uiBase ?? '/__vitest__/' + ...preOptions.api, + open: preOptions.ui && preOptions.open + ? preOptions.uiBase ?? '/__vitest__/' : undefined, preTransformRequests: false, }, @@ -42,6 +45,11 @@ export async function VitestPlugin(options: UserConfig = {}, ctx = new Vitest()) cacheDir: undefined, } }, + async configResolved(viteConfig) { + // viteConfig.test is final now, merge it for real + options = deepMerge(options, viteConfig.test as any || {}) + options.api = resolveApiConfig(options) + }, async configureServer(server) { if (haveStarted) await ctx.report('onServerRestart') diff --git a/test/global-setup/setupFiles/another-vite-instance.ts b/test/global-setup/globalSetup/another-vite-instance.ts similarity index 100% rename from test/global-setup/setupFiles/another-vite-instance.ts rename to test/global-setup/globalSetup/another-vite-instance.ts diff --git a/test/global-setup/setupFiles/default-export.js b/test/global-setup/globalSetup/default-export.js similarity index 100% rename from test/global-setup/setupFiles/default-export.js rename to test/global-setup/globalSetup/default-export.js diff --git a/test/global-setup/setupFiles/named-exports.js b/test/global-setup/globalSetup/named-exports.js similarity index 100% rename from test/global-setup/setupFiles/named-exports.js rename to test/global-setup/globalSetup/named-exports.js diff --git a/test/global-setup/setupFiles/server.ts b/test/global-setup/globalSetup/server.ts similarity index 100% rename from test/global-setup/setupFiles/server.ts rename to test/global-setup/globalSetup/server.ts diff --git a/test/global-setup/setupFiles/ts-with-imports.ts b/test/global-setup/globalSetup/ts-with-imports.ts similarity index 100% rename from test/global-setup/setupFiles/ts-with-imports.ts rename to test/global-setup/globalSetup/ts-with-imports.ts diff --git a/test/global-setup/setupFiles/add-something-to-global.ts b/test/global-setup/setupFiles/add-something-to-global.ts new file mode 100644 index 000000000000..58bedfe340c4 --- /dev/null +++ b/test/global-setup/setupFiles/add-something-to-global.ts @@ -0,0 +1,11 @@ +import { afterAll, beforeAll } from 'vitest' + +beforeAll(() => { + // @ts-expect-error type + global.something = 'something' +}) + +afterAll(() => { + // @ts-expect-error type + delete global.something +}) diff --git a/test/global-setup/test/setup-files.test.ts b/test/global-setup/test/setup-files.test.ts new file mode 100644 index 000000000000..9e6487c5e05b --- /dev/null +++ b/test/global-setup/test/setup-files.test.ts @@ -0,0 +1,6 @@ + +test('something has been added to global by setupFiles entry', async() => { + // @ts-expect-error + const result = something + expect(result).toBe('something') +}) diff --git a/test/global-setup/vitest.config.ts b/test/global-setup/vitest.config.ts index 9e264fd49de6..abac0b0b4b6f 100644 --- a/test/global-setup/vitest.config.ts +++ b/test/global-setup/vitest.config.ts @@ -3,13 +3,19 @@ import { defineConfig } from 'vite' export default defineConfig({ + plugins: [{ + name: 'a-vitest-plugin-that-changes-config', + config: () => ({ + test: { setupFiles: ['./setupFiles/add-something-to-global.ts'] }, + }), + }], test: { globals: true, globalSetup: [ - './setupFiles/default-export.js', - './setupFiles/named-exports.js', - './setupFiles/ts-with-imports.ts', - './setupFiles/another-vite-instance.ts', + './globalSetup/default-export.js', + './globalSetup/named-exports.js', + './globalSetup/ts-with-imports.ts', + './globalSetup/another-vite-instance.ts', ], }, }) From 489ad6012c8db214b245995db6b20bbe4d092468 Mon Sep 17 00:00:00 2001 From: dominikg Date: Thu, 27 Jan 2022 19:12:18 +0100 Subject: [PATCH 2/2] fix: lint --- test/global-setup/test/setup-files.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/global-setup/test/setup-files.test.ts b/test/global-setup/test/setup-files.test.ts index 9e6487c5e05b..10a22220baf5 100644 --- a/test/global-setup/test/setup-files.test.ts +++ b/test/global-setup/test/setup-files.test.ts @@ -1,6 +1,6 @@ test('something has been added to global by setupFiles entry', async() => { - // @ts-expect-error + // @ts-expect-error type const result = something expect(result).toBe('something') })