vitest.workspace.mts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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: ['./test/setup/migrate-mongo.ts', './test/setup/mongo.ts'],
  32. deps: {
  33. // Transform inline modules (allows ESM in require context)
  34. interopDefault: true,
  35. },
  36. server: {
  37. deps: {
  38. // Inline workspace packages that use CJS format
  39. inline: [
  40. '@growi/remark-attachment-refs',
  41. '@growi/remark-drawio',
  42. '@growi/remark-lsx',
  43. /src\/server\/events/,
  44. ],
  45. },
  46. },
  47. },
  48. }),
  49. // component test
  50. mergeConfig(configShared, {
  51. plugins: [react()],
  52. test: {
  53. name: 'app-components',
  54. environment: 'happy-dom',
  55. include: ['**/*.spec.{tsx,jsx}'],
  56. setupFiles: ['./test/setup/jest-dom.ts'],
  57. },
  58. }),
  59. ]);