- Remove require() import that was causing linting error - Simplify React act() function mocking for production builds
64 lines
2.1 KiB
TypeScript
64 lines
2.1 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) => {
|
|
callback();
|
|
};
|
|
}
|
|
|
|
// 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 }; |