// vitest.config.js —— B1 归属。单测配置(jsdom + @vue/test-utils)。 // 测试文件位于项目根 tests/frontend/unit(ui/ 之外),依赖解析自 ui/node_modules: // - server.fs.allow 放行上级目录 // - include 用绝对路径(与运行 cwd 无关) // - 测试文件中的裸导入(pinia/vue/@vue/test-utils)以 alias 指到 ui/node_modules 的 ESM 入口 // 运行方式(任选): // cd ui && npx vitest run tests/frontend/unit/b1 // 或项目根:npx --prefix ui vitest run --config ui/vitest.config.js tests/frontend/unit/b1 import { fileURLToPath } from 'node:url'; import { defineConfig } from 'vitest/config'; import vue from '@vitejs/plugin-vue'; const nodeModules = fileURLToPath(new URL('./node_modules', import.meta.url)); const testsDir = fileURLToPath(new URL('../tests/frontend/unit', import.meta.url)); export default defineConfig({ plugins: [vue()], // 独立依赖缓存目录:避免与 dev server(node_modules/.vite)争用 optimizeDeps 锁 cacheDir: 'node_modules/.vite-vitest', resolve: { alias: { // 测试文件在 ui/ 外,裸包名解析不到 ui/node_modules pinia: `${nodeModules}/pinia/dist/pinia.mjs`, vue: `${nodeModules}/vue/index.mjs`, '@vue/test-utils': `${nodeModules}/@vue/test-utils/dist/vue-test-utils.esm-bundler.mjs`, }, }, server: { // 测试文件位于项目根 tests/(ui/ 之外),放行上级目录 fs: { allow: ['..'] }, }, test: { environment: 'jsdom', // 测试目录在项目根 tests/frontend/unit(B1/B2/B3 各自子树) include: [`${testsDir}/**/*.{test,spec}.js`], globals: false, setupFiles: [`${testsDir}/b1/setup.js`], }, });