/// 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, }, });