vitest.setup.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /**
  2. * Vitest Setup File
  3. * Global mocks and configurations for unit tests
  4. */
  5. import { vi } from 'vitest'
  6. // Mock localStorage for tests
  7. const localStorageMock = {
  8. store: {} as Record<string, string>,
  9. getItem(key: string) {
  10. return this.store[key] || null
  11. },
  12. setItem(key: string, value: string) {
  13. this.store[key] = value
  14. },
  15. removeItem(key: string) {
  16. delete this.store[key]
  17. },
  18. clear() {
  19. this.store = {}
  20. }
  21. }
  22. Object.defineProperty(globalThis, 'localStorage', {
  23. value: localStorageMock
  24. })
  25. // Mock sessionStorage
  26. Object.defineProperty(globalThis, 'sessionStorage', {
  27. value: localStorageMock
  28. })
  29. // Mock window.matchMedia
  30. Object.defineProperty(globalThis, 'matchMedia', {
  31. writable: true,
  32. value: vi.fn().mockImplementation((query) => ({
  33. matches: false,
  34. media: query,
  35. onchange: null,
  36. addListener: vi.fn(),
  37. removeListener: vi.fn(),
  38. addEventListener: vi.fn(),
  39. removeEventListener: vi.fn(),
  40. dispatchEvent: vi.fn()
  41. }))
  42. })
  43. // Mock ResizeObserver
  44. globalThis.ResizeObserver = vi.fn().mockImplementation(() => ({
  45. observe: vi.fn(),
  46. unobserve: vi.fn(),
  47. disconnect: vi.fn()
  48. }))
  49. // Mock IntersectionObserver
  50. globalThis.IntersectionObserver = vi.fn().mockImplementation(() => ({
  51. observe: vi.fn(),
  52. unobserve: vi.fn(),
  53. disconnect: vi.fn()
  54. }))
  55. // Mock window.scrollTo
  56. globalThis.scrollTo = vi.fn()
  57. // Mock HTMLMediaElement methods
  58. globalThis.HTMLMediaElement.prototype.play = vi.fn().mockResolvedValue(undefined)
  59. globalThis.HTMLMediaElement.prototype.pause = vi.fn()
  60. globalThis.HTMLMediaElement.prototype.load = vi.fn()
  61. // Mock canvas context for video screenshots
  62. HTMLCanvasElement.prototype.getContext = vi.fn().mockReturnValue({
  63. drawImage: vi.fn(),
  64. fillRect: vi.fn(),
  65. clearRect: vi.fn(),
  66. getImageData: vi.fn(),
  67. putImageData: vi.fn(),
  68. createImageData: vi.fn()
  69. })
  70. HTMLCanvasElement.prototype.toDataURL = vi.fn().mockReturnValue('data:image/png;base64,mock')
  71. // Mock URL.createObjectURL
  72. globalThis.URL.createObjectURL = vi.fn().mockReturnValue('blob:mock-url')
  73. globalThis.URL.revokeObjectURL = vi.fn()
  74. // Clean up after each test
  75. afterEach(() => {
  76. localStorageMock.clear()
  77. vi.clearAllMocks()
  78. })