diff --git a/__mocks__/boneyard-js/react.tsx b/__mocks__/boneyard-js/react.tsx new file mode 100644 index 0000000..e13fd62 --- /dev/null +++ b/__mocks__/boneyard-js/react.tsx @@ -0,0 +1,6 @@ +import React from "react"; + +export function Skeleton({ children, loading }: { children: React.ReactNode; loading: boolean; name?: string; animate?: string; transition?: boolean | number }) { + if (loading) return
Loading...
; + return <>{children}; +} \ No newline at end of file diff --git a/app/__tests__/components/CurrentlyReading.test.tsx b/app/__tests__/components/CurrentlyReading.test.tsx index aac06bb..9f2ec76 100644 --- a/app/__tests__/components/CurrentlyReading.test.tsx +++ b/app/__tests__/components/CurrentlyReading.test.tsx @@ -2,16 +2,13 @@ import { render, screen, waitFor } from "@testing-library/react"; import CurrentlyReadingComp from "@/app/components/CurrentlyReading"; import React from "react"; -// Mock next-intl completely to avoid ESM issues jest.mock("next-intl", () => ({ useTranslations: () => (key: string) => key, useLocale: () => "en", })); -// Mock next/image jest.mock("next/image", () => ({ __esModule: true, - // eslint-disable-next-line @next/next/no-img-element default: (props: React.ImgHTMLAttributes) => {props.alt, })); @@ -22,8 +19,8 @@ describe("CurrentlyReading Component", () => { it("renders skeleton when loading", () => { (global.fetch as jest.Mock).mockReturnValue(new Promise(() => {})); - const { container } = render(); - expect(container.querySelector(".animate-pulse")).toBeInTheDocument(); + render(); + expect(screen.getByTestId("boneyard-skeleton")).toBeInTheDocument(); }); it("renders a book when data is fetched", async () => { diff --git a/app/__tests__/components/Header.test.tsx b/app/__tests__/components/Header.test.tsx index 1855e36..a66c4e0 100644 --- a/app/__tests__/components/Header.test.tsx +++ b/app/__tests__/components/Header.test.tsx @@ -23,7 +23,7 @@ jest.mock('next/navigation', () => ({ describe('Header', () => { it('renders the header with the dk logo', () => { render(
); - expect(screen.getByText('dk')).toBeInTheDocument(); + expect(screen.getByText('dk0')).toBeInTheDocument(); // Check for navigation links (appear in both desktop and mobile menus) expect(screen.getAllByText('Home').length).toBeGreaterThan(0); diff --git a/jest.config.ts b/jest.config.ts index 60d8666..f5e25e4 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -16,11 +16,12 @@ const config: Config = { testPathIgnorePatterns: ["/node_modules/", "/__mocks__/", "/.next/", "/e2e/"], // Transform react-markdown and other ESM modules transformIgnorePatterns: [ - "node_modules/(?!(react-markdown|remark-.*|rehype-.*|unified|bail|is-plain-obj|trough|vfile|vfile-message|unist-.*|micromark|parse-entities|character-entities|mdast-.*|hast-.*|property-information|space-separated-tokens|comma-separated-tokens|web-namespaces|zwitch|longest-streak|ccount)/)", + "node_modules/(?!(react-markdown|remark-.*|rehype-.*|unified|bail|is-plain-obj|trough|vfile|vfile-message|unist-.*|micromark|parse-entities|character-entities|mdast-.*|hast-.*|property-information|space-separated-tokens|comma-separated-tokens|web-namespaces|zwitch|longest-streak|ccount|boneyard-js)/)", ], // Module name mapping to fix haste collision moduleNameMapper: { "^@/(.*)$": "/$1", + "^boneyard-js/react$": "/__mocks__/boneyard-js/react.tsx", }, // Exclude problematic directories from haste modulePathIgnorePatterns: ["/.next/", "/node_modules/", "/e2e/"],