From cb4d54acdfb933e5f8d0b36594b0a3500a27c678 Mon Sep 17 00:00:00 2001 From: OrbisK Date: Thu, 27 Nov 2025 09:43:29 +0100 Subject: [PATCH 1/3] chore(vitest): move vue config into vitest project --- .github/workflows/module.yml | 3 -- .github/workflows/release.yml | 3 -- package.json | 3 +- vitest.config.ts | 82 +++++++++++++++++++++++++++++++---- vitest.vue.config.ts | 57 ------------------------ 5 files changed, 76 insertions(+), 72 deletions(-) delete mode 100644 vitest.vue.config.ts diff --git a/.github/workflows/module.yml b/.github/workflows/module.yml index 2ce79e0991..83988388cc 100644 --- a/.github/workflows/module.yml +++ b/.github/workflows/module.yml @@ -52,9 +52,6 @@ jobs: - name: Test run: pnpm run test run - - name: Test (vue) - run: pnpm run test:vue run - - name: Build run: pnpm run build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 041bf9935f..6f362306c9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -45,9 +45,6 @@ jobs: - name: Test run: pnpm run test run - - name: Test (vue) - run: pnpm run test:vue run - - name: Publish run: ./scripts/release.sh env: diff --git a/package.json b/package.json index 58bdacfb77..e5b1077fde 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,8 @@ "lint:fix": "eslint . --fix", "typecheck": "vue-tsc --noEmit && nuxt typecheck playgrounds/nuxt && nuxt typecheck docs && cd playgrounds/vue && vue-tsc --noEmit", "test": "vitest", - "test:vue": "vitest -c vitest.vue.config.ts", + "test:vue": "vitest --project vue", + "test:nuxt": "vitest --project nuxt", "release": "release-it" }, "dependencies": { diff --git a/vitest.config.ts b/vitest.config.ts index 2e1ffd7ced..b1d376da7a 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,18 +1,84 @@ import { fileURLToPath } from 'node:url' -import { defineVitestConfig } from '@nuxt/test-utils/config' +import { defineVitestProject } from '@nuxt/test-utils/config' +import { defineConfig } from 'vitest/config' +import vue from '@vitejs/plugin-vue' +import ui from './src/vite' +import { resolve } from 'pathe' +import { glob } from 'tinyglobby' -export default defineVitestConfig({ +const components = await glob('./src/runtime/components/*.vue', { absolute: true }) +const vueComponents = await glob('./src/runtime/vue/components/*.vue', { absolute: true }) + +export default defineConfig({ test: { testTimeout: 1000, globals: true, silent: true, - include: ['./test/components/**/**.spec.ts', './test/composables/**.spec.ts', './test/utils/**/**.spec.ts'], - environment: 'nuxt', - environmentOptions: { - nuxt: { - rootDir: fileURLToPath(new URL('test/nuxt/', import.meta.url)) + resolveSnapshotPath(path, extension, {config}) { + if(config.name === 'vue') { + return path.replace(/\/([^/]+)\.spec\.ts$/, `/__snapshots__/$1-vue.spec.ts${extension}`) + }else { + return path.replace(/\/([^/]+)\.spec\.ts$/, `/__snapshots__/$1.spec.ts${extension}`) } }, - setupFiles: fileURLToPath(new URL('test/nuxt/setup.ts', import.meta.url)) + projects: [ + await defineVitestProject({ + test: { + name: 'nuxt', + include: ['./test/components/**/**.spec.ts', './test/composables/**.spec.ts', './test/utils/**/**.spec.ts'], + environment: 'nuxt', + environmentOptions: { + nuxt: { + rootDir: fileURLToPath(new URL('test/nuxt/', import.meta.url)) + } + }, + setupFiles: fileURLToPath(new URL('test/nuxt/setup.ts', import.meta.url)) + } + }), + { + test: { + name: 'vue', + environment: 'happy-dom', + include: ['./test/components/**.spec.ts', './test/composables/**.spec.ts'], + setupFiles: ['./test/utils/setup.ts'], + }, + plugins: [ + vue(), + ui({ dts: false }), + { + name: 'nuxt-ui-test:components', + enforce: 'pre', + resolveId(id) { + if (id === '@nuxt/test-utils/runtime') { + return resolve('./test/utils/mount') + } + } + }, + { + name: 'nuxt-ui-test:components', + enforce: 'pre', + resolveId(id) { + if (id === '#components') { + return '#components' + } + }, + load(id) { + if (id === '#components' || id === '?#components') { + const resolvedComponents = [...vueComponents, ...components] + const renderedComponents = new Set() + return resolvedComponents.map((file) => { + const componentName = file.split('/').pop()!.replace('.vue', '') + if (renderedComponents.has(componentName)) { + return '' + } + renderedComponents.add(componentName) + return `export { default as U${componentName} } from '${file}'` + }).join('\n') + } + } + } + ] + } + ] } }) diff --git a/vitest.vue.config.ts b/vitest.vue.config.ts deleted file mode 100644 index 247f00554c..0000000000 --- a/vitest.vue.config.ts +++ /dev/null @@ -1,57 +0,0 @@ -import vue from '@vitejs/plugin-vue' -import ui from './src/vite' -import { defineConfig } from 'vitest/config' -import { glob } from 'tinyglobby' -import { resolve } from 'pathe' - -const components = await glob('./src/runtime/components/*.vue', { absolute: true }) -const vueComponents = await glob('./src/runtime/vue/components/*.vue', { absolute: true }) - -export default defineConfig({ - test: { - testTimeout: 1000, - environment: 'happy-dom', - silent: true, - include: ['./test/components/**.spec.ts', './test/composables/**.spec.ts'], - setupFiles: ['./test/utils/setup.ts'], - resolveSnapshotPath(path, extension) { - return path.replace(/\/([^/]+)\.spec\.ts$/, `/__snapshots__/$1-vue.spec.ts${extension}`) - } - }, - plugins: [ - vue(), - ui({ dts: false }), - { - name: 'nuxt-ui-test:components', - enforce: 'pre', - resolveId(id) { - if (id === '@nuxt/test-utils/runtime') { - return resolve('./test/utils/mount') - } - } - }, - { - name: 'nuxt-ui-test:components', - enforce: 'pre', - resolveId(id) { - if (id === '#components') { - return '#components' - } - }, - load(id) { - if (id === '#components' || id === '?#components') { - const resolvedComponents = [...vueComponents, ...components] - const renderedComponents = new Set() - return resolvedComponents.map((file) => { - const componentName = file.split('/').pop()!.replace('.vue', '') - if (renderedComponents.has(componentName)) { - return '' - } - renderedComponents.add(componentName) - return `export { default as U${componentName} } from '${file}'` - }).join('\n') - } - } - } - ] -}) From 620cf1216ed695cf39d5e63e06e4420b8436612f Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Thu, 27 Nov 2025 10:19:36 +0100 Subject: [PATCH 2/3] fix(vitest.config): lint --- vitest.config.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vitest.config.ts b/vitest.config.ts index b1d376da7a..c226ab5f26 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -14,10 +14,10 @@ export default defineConfig({ testTimeout: 1000, globals: true, silent: true, - resolveSnapshotPath(path, extension, {config}) { - if(config.name === 'vue') { + resolveSnapshotPath(path, extension, { config }) { + if (config.name === 'vue') { return path.replace(/\/([^/]+)\.spec\.ts$/, `/__snapshots__/$1-vue.spec.ts${extension}`) - }else { + } else { return path.replace(/\/([^/]+)\.spec\.ts$/, `/__snapshots__/$1.spec.ts${extension}`) } }, @@ -40,7 +40,7 @@ export default defineConfig({ name: 'vue', environment: 'happy-dom', include: ['./test/components/**.spec.ts', './test/composables/**.spec.ts'], - setupFiles: ['./test/utils/setup.ts'], + setupFiles: ['./test/utils/setup.ts'] }, plugins: [ vue(), From 28f1a054d64c010f6fbbba8f38e8b7f41c6379f2 Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Thu, 27 Nov 2025 10:24:27 +0100 Subject: [PATCH 3/3] chore(vitest.config): set extends --- vitest.config.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vitest.config.ts b/vitest.config.ts index c226ab5f26..3f8887ad91 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -11,7 +11,7 @@ const vueComponents = await glob('./src/runtime/vue/components/*.vue', { absolut export default defineConfig({ test: { - testTimeout: 1000, + testTimeout: 5000, globals: true, silent: true, resolveSnapshotPath(path, extension, { config }) { @@ -23,6 +23,7 @@ export default defineConfig({ }, projects: [ await defineVitestProject({ + extends: true, test: { name: 'nuxt', include: ['./test/components/**/**.spec.ts', './test/composables/**.spec.ts', './test/utils/**/**.spec.ts'], @@ -36,6 +37,7 @@ export default defineConfig({ } }), { + extends: true, test: { name: 'vue', environment: 'happy-dom',