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) =>
,
}));
@@ -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/"],