vitest.config.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import path from 'node:path';
  2. import react from '@vitejs/plugin-react';
  3. import { storybookTest } from '@storybook/addon-vitest/vitest-plugin';
  4. import { playwright } from '@vitest/browser-playwright';
  5. import { defineConfig } from 'vitest/config';
  6. const dirname = import.meta.dirname;
  7. export default defineConfig({
  8. plugins: [react()],
  9. resolve: {
  10. alias: {
  11. '@': path.resolve(dirname, 'src'),
  12. },
  13. },
  14. test: {
  15. globals: false,
  16. // Keep jsdom-heavy form tests within the memory budget of local and CI runners.
  17. maxWorkers: 2,
  18. projects: [
  19. {
  20. extends: true,
  21. test: {
  22. name: 'unit',
  23. include: ['src/test/**/*.test.ts'],
  24. environment: 'node',
  25. // msw probes localStorage on load; Node 25+'s file-less one warns per worker.
  26. execArgv: ['--no-experimental-webstorage'],
  27. setupFiles: ['./src/test/setup.ts', './src/test/setup.msw.ts'],
  28. },
  29. },
  30. {
  31. extends: true,
  32. test: {
  33. name: 'components',
  34. include: ['src/test/**/*.test.tsx'],
  35. environment: 'jsdom',
  36. setupFiles: ['./src/test/setup.ts', './src/test/setup.components.ts'],
  37. },
  38. },
  39. {
  40. extends: true,
  41. optimizeDeps: {
  42. include: ['aria-query', 'lz-string', 'pretty-format', 'dom-accessibility-api'],
  43. },
  44. plugins: [storybookTest({ configDir: path.join(dirname, '.storybook') })],
  45. test: {
  46. name: 'storybook',
  47. browser: {
  48. enabled: true,
  49. headless: true,
  50. provider: playwright({}),
  51. instances: [{ browser: 'chromium' }],
  52. },
  53. },
  54. },
  55. ],
  56. },
  57. });