vitest.config.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { fileURLToPath, URL } from 'node:url'
  2. import { defineConfig } from 'vitest/config'
  3. import vue from '@vitejs/plugin-vue'
  4. export default defineConfig({
  5. plugins: [vue()],
  6. resolve: {
  7. alias: {
  8. '@': fileURLToPath(new URL('./src', import.meta.url))
  9. }
  10. },
  11. test: {
  12. environment: 'happy-dom',
  13. include: ['tests/unit/**/*.{test,spec}.ts'],
  14. globals: true,
  15. setupFiles: ['./vitest.setup.ts'],
  16. coverage: {
  17. provider: 'v8',
  18. reporter: ['text', 'text-summary', 'html', 'lcov'],
  19. reportsDirectory: './coverage',
  20. include: ['src/**/*.ts', 'src/**/*.vue'],
  21. exclude: [
  22. 'src/main.ts',
  23. 'src/env.d.ts',
  24. 'src/**/*.d.ts',
  25. 'src/types/**',
  26. // Exclude demo and test views that are not core functionality
  27. 'src/views/demo/**',
  28. 'src/views/test/**',
  29. 'src/views/monitor/**',
  30. 'src/views/stream/**',
  31. 'src/views/camera/channel.vue',
  32. 'src/views/camera/stream-test.vue',
  33. 'src/views/camera/video.vue',
  34. // Exclude layout and router (tested via E2E)
  35. 'src/layout/**',
  36. 'src/router/**',
  37. // Exclude complex components/composables that are hard to unit test
  38. 'src/components/VideoPlayer.vue',
  39. 'src/components/monitor/**',
  40. 'src/components/ThemeSettings.vue',
  41. 'src/components/PtzController.vue',
  42. 'src/components/HelloWorld.vue',
  43. 'src/composables/**',
  44. // Exclude complex API modules with external dependencies
  45. 'src/api/stream.ts',
  46. 'src/api/cloudflare-stream.ts',
  47. 'src/store/stream.ts',
  48. 'src/store/index.ts',
  49. 'src/utils/request.ts'
  50. ],
  51. // Coverage thresholds - target 60%
  52. thresholds: {
  53. statements: 60,
  54. branches: 50,
  55. functions: 50,
  56. lines: 60
  57. }
  58. }
  59. }
  60. })