From 36fbff80c563cc0f6ee3e8665a2c4577e853503d Mon Sep 17 00:00:00 2001 From: poyoho <907415276@qq.com> Date: Sat, 12 Feb 2022 16:51:23 +0800 Subject: [PATCH 1/8] feat: test define --- test/core/test/basic.test.ts | 4 ++++ test/core/vitest.config.ts | 3 +++ 2 files changed, 7 insertions(+) diff --git a/test/core/test/basic.test.ts b/test/core/test/basic.test.ts index b646ce3220e4..6c0a17ad8f4b 100644 --- a/test/core/test/basic.test.ts +++ b/test/core/test/basic.test.ts @@ -62,3 +62,7 @@ function callbackTest(name: string, doneValue: any) { callbackTest('success ', undefined) callbackTest('success done(false)', false) + +test('vite define', () => { + expect(MY_CONSTANT).toBe('my constant') +}) diff --git a/test/core/vitest.config.ts b/test/core/vitest.config.ts index c53eaf09ce5c..e985b43e092e 100644 --- a/test/core/vitest.config.ts +++ b/test/core/vitest.config.ts @@ -17,6 +17,9 @@ export default defineConfig({ }, }, ], + define: { + MY_CONSTANT: '"my constant"', + }, test: { testTimeout: 2000, // threads: false, From 983f16189a0c765b01eb28f115843feaa0be14ba Mon Sep 17 00:00:00 2001 From: poyoho <907415276@qq.com> Date: Sat, 12 Feb 2022 17:43:41 +0800 Subject: [PATCH 2/8] feat: error in vue --- examples/vue/components/Define.vue | 7 +++++++ examples/vue/test/basic.test.ts | 9 +++++++++ examples/vue/types.d.ts | 1 + examples/vue/vitest.config.ts | 3 +++ 4 files changed, 20 insertions(+) create mode 100644 examples/vue/components/Define.vue create mode 100644 examples/vue/types.d.ts diff --git a/examples/vue/components/Define.vue b/examples/vue/components/Define.vue new file mode 100644 index 000000000000..3ed78e1ffc1a --- /dev/null +++ b/examples/vue/components/Define.vue @@ -0,0 +1,7 @@ + + + diff --git a/examples/vue/test/basic.test.ts b/examples/vue/test/basic.test.ts index 116b288ec762..9f557994ea9b 100644 --- a/examples/vue/test/basic.test.ts +++ b/examples/vue/test/basic.test.ts @@ -1,5 +1,6 @@ import { mount } from '@vue/test-utils' import Hello from '../components/Hello.vue' +import Define from '../components/Define.vue' test('mount component', async() => { expect(Hello).toBeTruthy() @@ -21,3 +22,11 @@ test('mount component', async() => { expect(wrapper.text()).toContain('4 x 4 = 16') }) + +test('vite define in component', async() => { + expect(Define).toBeTruthy() + + const wrapper = mount(Define) + + expect(wrapper.text()).toContain('my constant') +}) diff --git a/examples/vue/types.d.ts b/examples/vue/types.d.ts new file mode 100644 index 000000000000..6b85feb7c2ec --- /dev/null +++ b/examples/vue/types.d.ts @@ -0,0 +1 @@ +declare const MY_CONSTANT: string diff --git a/examples/vue/vitest.config.ts b/examples/vue/vitest.config.ts index 4e3147e9b6df..a5fbd4c640c5 100644 --- a/examples/vue/vitest.config.ts +++ b/examples/vue/vitest.config.ts @@ -5,6 +5,9 @@ export default defineConfig({ plugins: [ Vue(), ], + define: { + MY_CONSTANT: '"my constant"', + }, test: { globals: true, environment: 'happy-dom', From e61c03113f24faab0b110518b15646ad8110495f Mon Sep 17 00:00:00 2001 From: poyoho <907415276@qq.com> Date: Sun, 13 Feb 2022 01:01:02 +0800 Subject: [PATCH 3/8] fix: define in vm --- packages/vitest/src/node/config.ts | 2 ++ packages/vitest/src/node/execute.ts | 2 ++ packages/vitest/src/types/config.ts | 2 ++ test/core/test/basic.test.ts | 4 ---- test/core/vitest.config.ts | 3 --- test/coverage-test/src/Defined.vue | 6 ++++++ test/coverage-test/src/Hello.vue | 1 - test/coverage-test/test/vue.test.ts | 9 +++++++++ test/coverage-test/typings.d.ts | 1 + test/coverage-test/vitest.config.ts | 3 +++ 10 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 test/coverage-test/src/Defined.vue create mode 100644 test/coverage-test/typings.d.ts diff --git a/packages/vitest/src/node/config.ts b/packages/vitest/src/node/config.ts index 5c8ce57dd780..510b98d52915 100644 --- a/packages/vitest/src/node/config.ts +++ b/packages/vitest/src/node/config.ts @@ -59,6 +59,8 @@ export function resolveConfig( if (viteConfig.base !== '/') resolved.base = viteConfig.base + resolved.define = viteConfig.define + resolved.coverage = resolveC8Options(resolved.coverage, resolved.root) resolved.deps = resolved.deps || {} diff --git a/packages/vitest/src/node/execute.ts b/packages/vitest/src/node/execute.ts index 483c52611ad6..1b1ca1361acc 100644 --- a/packages/vitest/src/node/execute.ts +++ b/packages/vitest/src/node/execute.ts @@ -43,6 +43,8 @@ export class VitestRunner extends ViteNodeRunner { __vite_ssr_dynamic_import__: (dep: string) => mocker.requestWithMock(dep), __vitest_mocker__: mocker, + + ...process.__vitest_worker__.config.define, }) } } diff --git a/packages/vitest/src/types/config.ts b/packages/vitest/src/types/config.ts index 43b67f57b84f..fafacc0280d9 100644 --- a/packages/vitest/src/types/config.ts +++ b/packages/vitest/src/types/config.ts @@ -328,4 +328,6 @@ export interface ResolvedConfig extends Omit, 'config' | 'f snapshotOptions: SnapshotStateOptions api?: ApiConfig + + define?: Record } diff --git a/test/core/test/basic.test.ts b/test/core/test/basic.test.ts index 6c0a17ad8f4b..b646ce3220e4 100644 --- a/test/core/test/basic.test.ts +++ b/test/core/test/basic.test.ts @@ -62,7 +62,3 @@ function callbackTest(name: string, doneValue: any) { callbackTest('success ', undefined) callbackTest('success done(false)', false) - -test('vite define', () => { - expect(MY_CONSTANT).toBe('my constant') -}) diff --git a/test/core/vitest.config.ts b/test/core/vitest.config.ts index e985b43e092e..c53eaf09ce5c 100644 --- a/test/core/vitest.config.ts +++ b/test/core/vitest.config.ts @@ -17,9 +17,6 @@ export default defineConfig({ }, }, ], - define: { - MY_CONSTANT: '"my constant"', - }, test: { testTimeout: 2000, // threads: false, diff --git a/test/coverage-test/src/Defined.vue b/test/coverage-test/src/Defined.vue new file mode 100644 index 000000000000..ea23174393a8 --- /dev/null +++ b/test/coverage-test/src/Defined.vue @@ -0,0 +1,6 @@ + + diff --git a/test/coverage-test/src/Hello.vue b/test/coverage-test/src/Hello.vue index f242ec0bf124..85fd0c9f3b16 100644 --- a/test/coverage-test/src/Hello.vue +++ b/test/coverage-test/src/Hello.vue @@ -5,7 +5,6 @@ const times = ref(2) const props = defineProps<{ count: number }>() const result = computed(() => props.count * times.value) - defineExpose(props) diff --git a/test/coverage-test/test/vue.test.ts b/test/coverage-test/test/vue.test.ts index ee9df3a7ef5a..521f4bfb5056 100644 --- a/test/coverage-test/test/vue.test.ts +++ b/test/coverage-test/test/vue.test.ts @@ -5,6 +5,7 @@ import { expect, test } from 'vitest' import { mount } from '@vue/test-utils' import Hello from '../src/Hello.vue' +import Defined from '../src/Defined.vue' test('vue 3 coverage', async() => { expect(Hello).toBeTruthy() @@ -26,3 +27,11 @@ test('vue 3 coverage', async() => { expect(wrapper.text()).toContain('4 x 4 = 16') }) + +test('define package in vm', () => { + expect(Defined).toBeTruthy() + + const wrapper = mount(Defined) + + expect(wrapper.text()).toContain(MY_CONSTANT) +}) diff --git a/test/coverage-test/typings.d.ts b/test/coverage-test/typings.d.ts new file mode 100644 index 000000000000..6b85feb7c2ec --- /dev/null +++ b/test/coverage-test/typings.d.ts @@ -0,0 +1 @@ +declare const MY_CONSTANT: string diff --git a/test/coverage-test/vitest.config.ts b/test/coverage-test/vitest.config.ts index a45fa5ac20ef..42303dbc3c44 100644 --- a/test/coverage-test/vitest.config.ts +++ b/test/coverage-test/vitest.config.ts @@ -5,6 +5,9 @@ export default defineConfig({ plugins: [ vue(), ], + define: { + MY_CONSTANT: '"my constant"', + }, test: { }, }) From 6a23dd746f98c22a0119514144d6598073279a90 Mon Sep 17 00:00:00 2001 From: poyoho <907415276@qq.com> Date: Sun, 13 Feb 2022 01:04:32 +0800 Subject: [PATCH 4/8] revert: remove example --- examples/vue/components/Define.vue | 7 ------- examples/vue/test/basic.test.ts | 9 --------- examples/vue/types.d.ts | 1 - examples/vue/vitest.config.ts | 3 --- 4 files changed, 20 deletions(-) delete mode 100644 examples/vue/components/Define.vue delete mode 100644 examples/vue/types.d.ts diff --git a/examples/vue/components/Define.vue b/examples/vue/components/Define.vue deleted file mode 100644 index 3ed78e1ffc1a..000000000000 --- a/examples/vue/components/Define.vue +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/examples/vue/test/basic.test.ts b/examples/vue/test/basic.test.ts index 9f557994ea9b..116b288ec762 100644 --- a/examples/vue/test/basic.test.ts +++ b/examples/vue/test/basic.test.ts @@ -1,6 +1,5 @@ import { mount } from '@vue/test-utils' import Hello from '../components/Hello.vue' -import Define from '../components/Define.vue' test('mount component', async() => { expect(Hello).toBeTruthy() @@ -22,11 +21,3 @@ test('mount component', async() => { expect(wrapper.text()).toContain('4 x 4 = 16') }) - -test('vite define in component', async() => { - expect(Define).toBeTruthy() - - const wrapper = mount(Define) - - expect(wrapper.text()).toContain('my constant') -}) diff --git a/examples/vue/types.d.ts b/examples/vue/types.d.ts deleted file mode 100644 index 6b85feb7c2ec..000000000000 --- a/examples/vue/types.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare const MY_CONSTANT: string diff --git a/examples/vue/vitest.config.ts b/examples/vue/vitest.config.ts index a5fbd4c640c5..4e3147e9b6df 100644 --- a/examples/vue/vitest.config.ts +++ b/examples/vue/vitest.config.ts @@ -5,9 +5,6 @@ export default defineConfig({ plugins: [ Vue(), ], - define: { - MY_CONSTANT: '"my constant"', - }, test: { globals: true, environment: 'happy-dom', From 7881b507c170ff47f950090f60c06f692802edea Mon Sep 17 00:00:00 2001 From: poyoho <907415276@qq.com> Date: Sun, 13 Feb 2022 01:05:03 +0800 Subject: [PATCH 5/8] revert: test --- test/coverage-test/src/Hello.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/test/coverage-test/src/Hello.vue b/test/coverage-test/src/Hello.vue index 85fd0c9f3b16..f242ec0bf124 100644 --- a/test/coverage-test/src/Hello.vue +++ b/test/coverage-test/src/Hello.vue @@ -5,6 +5,7 @@ const times = ref(2) const props = defineProps<{ count: number }>() const result = computed(() => props.count * times.value) + defineExpose(props) From 738cdc32636e8ad2758c5eb17aec146d68572cb1 Mon Sep 17 00:00:00 2001 From: poyoho <907415276@qq.com> Date: Sun, 13 Feb 2022 10:14:51 +0800 Subject: [PATCH 6/8] feat: define global env in the vm --- packages/vite-node/src/client.ts | 5 ++++- packages/vitest/src/node/config.ts | 2 -- packages/vitest/src/node/execute.ts | 2 -- packages/vitest/src/types/config.ts | 2 -- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/vite-node/src/client.ts b/packages/vite-node/src/client.ts index 43065be542ac..0d812c4d756b 100644 --- a/packages/vite-node/src/client.ts +++ b/packages/vite-node/src/client.ts @@ -111,7 +111,10 @@ export class ViteNodeRunner { __dirname: dirname(__filename), }) - const fn = vm.runInThisContext(`async (${Object.keys(context).join(',')})=>{{${transformed}\n}}`, { + const fn = vm.runInThisContext(`async (${Object.keys(context).join(',')})=>{ + __vite_ssr_import__("/@vite/env") + {${transformed}\n} + }`, { filename: fsPath, lineOffset: 0, }) diff --git a/packages/vitest/src/node/config.ts b/packages/vitest/src/node/config.ts index 3e87d90a7a48..f1a60fad06fa 100644 --- a/packages/vitest/src/node/config.ts +++ b/packages/vitest/src/node/config.ts @@ -61,8 +61,6 @@ export function resolveConfig( if (viteConfig.base !== '/') resolved.base = viteConfig.base - resolved.define = viteConfig.define - resolved.coverage = resolveC8Options(options.coverage || {}, resolved.root) resolved.deps = resolved.deps || {} diff --git a/packages/vitest/src/node/execute.ts b/packages/vitest/src/node/execute.ts index 1b1ca1361acc..483c52611ad6 100644 --- a/packages/vitest/src/node/execute.ts +++ b/packages/vitest/src/node/execute.ts @@ -43,8 +43,6 @@ export class VitestRunner extends ViteNodeRunner { __vite_ssr_dynamic_import__: (dep: string) => mocker.requestWithMock(dep), __vitest_mocker__: mocker, - - ...process.__vitest_worker__.config.define, }) } } diff --git a/packages/vitest/src/types/config.ts b/packages/vitest/src/types/config.ts index d6cf64e7d683..d245d7d69d45 100644 --- a/packages/vitest/src/types/config.ts +++ b/packages/vitest/src/types/config.ts @@ -325,6 +325,4 @@ export interface ResolvedConfig extends Omit, 'config' | 'f reporters: (Reporter | BuiltinReporters)[] api?: ApiConfig - - define?: Record } From 249c33ff5ad436129996533a19402d275b44799f Mon Sep 17 00:00:00 2001 From: poyoho <907415276@qq.com> Date: Sun, 13 Feb 2022 15:28:16 +0800 Subject: [PATCH 7/8] fix: provide the vite define variable in vm context once --- packages/vite-node/src/cli.ts | 3 +++ packages/vite-node/src/client.ts | 5 +---- packages/vitest/src/node/execute.ts | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/vite-node/src/cli.ts b/packages/vite-node/src/cli.ts index 876c57a985de..8f3c01993313 100644 --- a/packages/vite-node/src/cli.ts +++ b/packages/vite-node/src/cli.ts @@ -84,6 +84,9 @@ async function run(options: CliOptions = {}) { }, }) + // provide the vite define variable in vm context + await runner.executeId('/@vite/env') + for (const file of files) await runner.executeFile(file) diff --git a/packages/vite-node/src/client.ts b/packages/vite-node/src/client.ts index 0d812c4d756b..43065be542ac 100644 --- a/packages/vite-node/src/client.ts +++ b/packages/vite-node/src/client.ts @@ -111,10 +111,7 @@ export class ViteNodeRunner { __dirname: dirname(__filename), }) - const fn = vm.runInThisContext(`async (${Object.keys(context).join(',')})=>{ - __vite_ssr_import__("/@vite/env") - {${transformed}\n} - }`, { + const fn = vm.runInThisContext(`async (${Object.keys(context).join(',')})=>{{${transformed}\n}}`, { filename: fsPath, lineOffset: 0, }) diff --git a/packages/vitest/src/node/execute.ts b/packages/vitest/src/node/execute.ts index 483c52611ad6..a9cbce1e1b13 100644 --- a/packages/vitest/src/node/execute.ts +++ b/packages/vitest/src/node/execute.ts @@ -14,6 +14,9 @@ export interface ExecuteOptions extends ViteNodeRunnerOptions { export async function executeInViteNode(options: ExecuteOptions) { const runner = new VitestRunner(options) + // provide the vite define variable in vm context + await runner.executeId('/@vite/env') + const result: any[] = [] for (const file of options.files) result.push(await runner.executeFile(file)) From 674fb04a3472953cbdf465eb8e8567bc4202f985 Mon Sep 17 00:00:00 2001 From: poyoho <907415276@qq.com> Date: Sun, 13 Feb 2022 15:38:05 +0800 Subject: [PATCH 8/8] chore: fix comment --- packages/vite-node/src/cli.ts | 2 +- packages/vitest/src/node/execute.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite-node/src/cli.ts b/packages/vite-node/src/cli.ts index 8f3c01993313..aec50fc02884 100644 --- a/packages/vite-node/src/cli.ts +++ b/packages/vite-node/src/cli.ts @@ -84,7 +84,7 @@ async function run(options: CliOptions = {}) { }, }) - // provide the vite define variable in vm context + // provide the vite define variable in this context await runner.executeId('/@vite/env') for (const file of files) diff --git a/packages/vitest/src/node/execute.ts b/packages/vitest/src/node/execute.ts index a9cbce1e1b13..4108b0c88604 100644 --- a/packages/vitest/src/node/execute.ts +++ b/packages/vitest/src/node/execute.ts @@ -14,7 +14,7 @@ export interface ExecuteOptions extends ViteNodeRunnerOptions { export async function executeInViteNode(options: ExecuteOptions) { const runner = new VitestRunner(options) - // provide the vite define variable in vm context + // provide the vite define variable in this context await runner.executeId('/@vite/env') const result: any[] = []