diff --git a/packages/ui/src/test/setup.ts b/packages/ui/src/test/setup.ts index 4134f95..7b7ab90 100644 --- a/packages/ui/src/test/setup.ts +++ b/packages/ui/src/test/setup.ts @@ -7,61 +7,65 @@ import { matchesMediaQuery, resetAccessibilityPreferences } from "./a11y"; afterEach(() => { resetAccessibilityPreferences(); - cleanup(); -}); - -class ResizeObserverMock { - observe() {} - unobserve() {} - disconnect() {} -} - -class PointerEventMock extends MouseEvent { - constructor(type: string, props: PointerEventInit = {}) { - super(type, props); + if (typeof document !== "undefined") { + cleanup(); } +}); + +if (typeof window !== "undefined" && typeof MouseEvent !== "undefined") { + class ResizeObserverMock { + observe() {} + unobserve() {} + disconnect() {} + } + + class PointerEventMock extends MouseEvent { + constructor(type: string, props: PointerEventInit = {}) { + super(type, props); + } + } + + Object.defineProperty(window, "matchMedia", { + writable: true, + value: vi.fn().mockImplementation((query: string) => ({ + matches: matchesMediaQuery(query), + media: query, + onchange: null, + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + addListener: vi.fn(), + removeListener: vi.fn(), + dispatchEvent: vi.fn() + })) + }); + + Object.defineProperty(window, "ResizeObserver", { + writable: true, + value: ResizeObserverMock + }); + + Object.defineProperty(window, "PointerEvent", { + writable: true, + value: PointerEventMock + }); + + Object.defineProperty(window.HTMLElement.prototype, "scrollIntoView", { + configurable: true, + value: vi.fn() + }); + + Object.defineProperty(window.HTMLElement.prototype, "hasPointerCapture", { + configurable: true, + value: vi.fn(() => false) + }); + + Object.defineProperty(window.HTMLElement.prototype, "releasePointerCapture", { + configurable: true, + value: vi.fn() + }); + + Object.defineProperty(window.HTMLElement.prototype, "setPointerCapture", { + configurable: true, + value: vi.fn() + }); } - -Object.defineProperty(window, "matchMedia", { - writable: true, - value: vi.fn().mockImplementation((query: string) => ({ - matches: matchesMediaQuery(query), - media: query, - onchange: null, - addEventListener: vi.fn(), - removeEventListener: vi.fn(), - addListener: vi.fn(), - removeListener: vi.fn(), - dispatchEvent: vi.fn() - })) -}); - -Object.defineProperty(window, "ResizeObserver", { - writable: true, - value: ResizeObserverMock -}); - -Object.defineProperty(window, "PointerEvent", { - writable: true, - value: PointerEventMock -}); - -Object.defineProperty(window.HTMLElement.prototype, "scrollIntoView", { - configurable: true, - value: vi.fn() -}); - -Object.defineProperty(window.HTMLElement.prototype, "hasPointerCapture", { - configurable: true, - value: vi.fn(() => false) -}); - -Object.defineProperty(window.HTMLElement.prototype, "releasePointerCapture", { - configurable: true, - value: vi.fn() -}); - -Object.defineProperty(window.HTMLElement.prototype, "setPointerCapture", { - configurable: true, - value: vi.fn() -}); diff --git a/vitest.config.ts b/vitest.config.ts index 23b8a94..dafc40e 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -49,7 +49,7 @@ export default defineConfig({ test: { clearMocks: true, environment: "jsdom", - include: ["packages/ui/src/**/*.test.{ts,tsx}"], + include: ["packages/ui/src/**/*.test.{ts,tsx}", "scripts/harness/**/*.test.ts"], restoreMocks: true, setupFiles: [path.resolve(rootDir, "packages/ui/src/test/setup.ts")] }