/// import { defineConfig } from 'vite' import react from '@vitejs/plugin-react-swc' import path from 'path' export default defineConfig({ plugins: [react()], resolve: { alias: { "@": path.resolve(__dirname, "./src"), }, }, test: { // 브라우저 환경 시뮬레이션 environment: 'jsdom', // 전역 설정 파일 setupFiles: ['./src/setupTests.ts'], // 전역 변수 설정 globals: true, // CSS 모듈 및 스타일 파일 무시 css: { modules: { classNameStrategy: 'non-scoped', }, }, // 포함할 파일 패턴 include: ['**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], // 제외할 파일 패턴 exclude: [ 'node_modules', 'dist', '.git', '.cache', 'ccusage/**', '**/.{idea,git,cache,output,temp}/**', '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*' ], // 커버리지 설정 coverage: { provider: 'v8', reporter: ['text', 'json', 'html'], exclude: [ 'node_modules/', 'src/setupTests.ts', '**/*.d.ts', '**/*.config.{js,ts}', '**/index.ts', // 단순 re-export 파일들 'src/main.tsx', // 앱 진입점 'src/vite-env.d.ts', '**/*.stories.{js,ts,jsx,tsx}', // Storybook 파일 'coverage/**', 'dist/**', '**/.{git,cache,output,temp}/**', ], // 80% 커버리지 목표 thresholds: { global: { branches: 70, functions: 70, lines: 80, statements: 80, }, }, }, // 테스트 실행 환경 변수 env: { NODE_ENV: 'test', VITE_APPWRITE_URL: 'https://test.appwrite.io/v1', VITE_APPWRITE_PROJECT_ID: 'test-project-id', VITE_APPWRITE_DATABASE_ID: 'test-database-id', VITE_APPWRITE_TRANSACTIONS_COLLECTION_ID: 'test-transactions-collection-id', }, // 테스트 병렬 실행 및 성능 설정 pool: 'threads', poolOptions: { threads: { singleThread: false, }, }, // 테스트 파일 변경 감지 watch: { ignore: ['**/node_modules/**', '**/dist/**'], }, // 로그 레벨 설정 logLevel: 'info', // 재시도 설정 retry: 2, // 테스트 타임아웃 (밀리초) testTimeout: 10000, // 훅 타임아웃 (밀리초) hookTimeout: 10000, }, });