vitest.workspace.mts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import react from '@vitejs/plugin-react';
  2. import tsconfigPaths from 'vite-tsconfig-paths';
  3. import { defineConfig, defineWorkspace, mergeConfig } from 'vitest/config';
  4. const configShared = defineConfig({
  5. plugins: [tsconfigPaths()],
  6. test: {
  7. clearMocks: true,
  8. globals: true,
  9. exclude: ['playwright/**'],
  10. },
  11. });
  12. export default defineWorkspace([
  13. // unit test
  14. mergeConfig(configShared, {
  15. test: {
  16. name: 'app-unit',
  17. environment: 'node',
  18. include: ['**/*.spec.{ts,js}'],
  19. },
  20. }),
  21. // integration test
  22. mergeConfig(configShared, {
  23. resolve: {
  24. // Prefer require (CJS) for server-side packages
  25. conditions: ['require', 'node', 'default'],
  26. },
  27. test: {
  28. name: 'app-integration',
  29. environment: 'node',
  30. include: ['**/*.integ.ts'],
  31. setupFiles: [
  32. './test/setup/migrate-mongo.ts',
  33. './test/setup/mongo/index.ts',
  34. ],
  35. deps: {
  36. // Transform inline modules (allows ESM in require context)
  37. interopDefault: true,
  38. },
  39. server: {
  40. deps: {
  41. // Inline workspace packages that use CJS format
  42. inline: [
  43. '@growi/remark-attachment-refs',
  44. '@growi/remark-drawio',
  45. '@growi/remark-lsx',
  46. /src\/server\/events/,
  47. ],
  48. },
  49. },
  50. },
  51. }),
  52. // component test
  53. mergeConfig(configShared, {
  54. plugins: [react()],
  55. test: {
  56. name: 'app-components',
  57. environment: 'happy-dom',
  58. include: ['**/*.spec.{tsx,jsx}'],
  59. setupFiles: ['./test/setup/jest-dom.ts'],
  60. },
  61. }),
  62. ]);