Files
portfolio/jest.setup.ts
denshooter 1901dd44b8 Fix TypeScript error in jest.setup.ts
- Update React.act mock to handle both sync and async callbacks
- Fix type compatibility with React's act function signature
- Ensures proper TypeScript compilation during build
2025-10-15 16:09:48 +02:00

67 lines
2.2 KiB
TypeScript

import 'whatwg-fetch';
import React from "react";
import { render } from '@testing-library/react';
import { ToastProvider } from '@/components/Toast';
// Fix for React production builds in testing
// Mock React's act function for production builds
if (process.env.NODE_ENV === 'production') {
// Override React.act for production builds
const originalAct = React.act;
if (!originalAct) {
React.act = (callback: () => void | Promise<void>) => {
const result = callback();
if (result instanceof Promise) {
return result;
}
} as typeof React.act;
}
// Also mock the act function from react-dom/test-utils
// This is handled by Jest's module resolution
}
// Mock react-responsive-masonry
jest.mock("react-responsive-masonry", () => ({
__esModule: true,
default: ({ children }: { children: React.ReactNode }) =>
React.createElement("div", null, children),
get ResponsiveMasonry() {
const ResponsiveMasonryComponent = ({ children }: { children: React.ReactNode }) =>
React.createElement("div", null, children);
ResponsiveMasonryComponent.displayName = 'ResponsiveMasonry';
return ResponsiveMasonryComponent;
},
}));
// Mock next/link
jest.mock('next/link', () => {
const LinkComponent = ({ children }: { children: React.ReactNode }) => children;
LinkComponent.displayName = 'Link';
return LinkComponent;
});
// Mock next/image
jest.mock('next/image', () => {
const ImageComponent = ({ src, alt, fill, priority, ...props }: Record<string, unknown>) => {
// Convert boolean props to strings for DOM compatibility
const domProps: Record<string, unknown> = { src, alt };
if (fill) domProps.style = { width: '100%', height: '100%', objectFit: 'cover' };
if (priority) domProps.loading = 'eager';
return React.createElement('img', { ...domProps, ...props });
};
ImageComponent.displayName = 'Image';
return ImageComponent;
});
// Custom render function with ToastProvider
const customRender = (ui: React.ReactElement, options = {}) =>
render(ui, {
wrapper: ({ children }) => React.createElement(ToastProvider, null, children),
...options,
});
// Re-export everything
export * from '@testing-library/react';
export { customRender as render };