Files
portfolio/jest.setup.ts
denshooter a5dba298f3
Some checks failed
Dev Deployment (Zero Downtime) / deploy-dev (push) Failing after 9m26s
feat: major UI/UX overhaul, snippets system, and performance fixes
2026-02-16 12:31:40 +01:00

68 lines
1.9 KiB
TypeScript

import "@testing-library/jest-dom";
import { Request, Response, Headers } from "node-fetch";
// Mock matchMedia
Object.defineProperty(window, "matchMedia", {
writable: true,
value: jest.fn().mockImplementation((query) => ({
matches: false,
media: query,
onchange: null,
addListener: jest.fn(),
removeListener: jest.fn(),
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
dispatchEvent: jest.fn(),
})),
});
// Mock IntersectionObserver
class MockIntersectionObserver {
observe = jest.fn();
unobserve = jest.fn();
disconnect = jest.fn();
}
Object.defineProperty(window, "IntersectionObserver", {
writable: true,
configurable: true,
value: MockIntersectionObserver,
});
// Polyfill Headers/Request/Response
if (!global.Headers) {
// @ts-expect-error - Polyfilling global Headers for jest environment
global.Headers = Headers;
}
if (!global.Request) {
// @ts-expect-error - Polyfilling global Request for jest environment
global.Request = Request;
}
if (!global.Response) {
// @ts-expect-error - Polyfilling global Response for jest environment
global.Response = Response;
}
// Mock NextResponse
jest.mock('next/server', () => {
const actual = jest.requireActual('next/server');
return {
...actual,
NextResponse: {
json: (data: Record<string, unknown>, init?: unknown) => {
// Use global Response from whatwg-fetch
const res = new (global as any).Response(JSON.stringify(data), init);
res.headers.set('Content-Type', 'application/json');
return res;
},
next: () => ({ headers: new Headers() }),
redirect: (_url: string) => ({ headers: new Headers(), status: 302 }),
},
};
});
// Env vars for tests
process.env.DIRECTUS_URL = "http://localhost:8055";
process.env.DIRECTUS_TOKEN = "test-token";
process.env.NEXT_PUBLIC_SITE_URL = "http://localhost:3000";