diff --git a/src/pages/_app.test.jsx b/src/pages/_app.test.jsx new file mode 100644 index 000000000..795c569a2 --- /dev/null +++ b/src/pages/_app.test.jsx @@ -0,0 +1,37 @@ +// @vitest-environment jsdom + +import { render, screen } from "@testing-library/react"; +import { describe, expect, it, vi } from "vitest"; + +// Next's Head implementation relies on internal Next contexts; stub it for unit tests. +vi.mock("next/head", () => ({ + default: ({ children }) => <>{children}, +})); + +vi.mock("utils/contexts/color", () => ({ + ColorProvider: ({ children }) => <>{children}, +})); +vi.mock("utils/contexts/theme", () => ({ + ThemeProvider: ({ children }) => <>{children}, +})); +vi.mock("utils/contexts/settings", () => ({ + SettingsProvider: ({ children }) => <>{children}, +})); +vi.mock("utils/contexts/tab", () => ({ + TabProvider: ({ children }) => <>{children}, +})); + +import App from "./_app.jsx"; + +describe("pages/_app", () => { + it("renders the active page component with pageProps", () => { + function Page({ message }) { + return
msg:{message}
; + } + + render(); + + expect(screen.getByText("msg:hello")).toBeInTheDocument(); + expect(document.querySelector('meta[name="viewport"]')).toBeTruthy(); + }); +}); diff --git a/src/pages/_document.test.jsx b/src/pages/_document.test.jsx new file mode 100644 index 000000000..e617dd59d --- /dev/null +++ b/src/pages/_document.test.jsx @@ -0,0 +1,24 @@ +import { renderToStaticMarkup } from "react-dom/server"; +import { describe, expect, it, vi } from "vitest"; + +vi.mock("next/document", () => ({ + Html: ({ children }) =>
{children}
, + Head: ({ children }) =>
{children}
, + Main: () =>
, + NextScript: () =>