import { render, screen } from "@testing-library/react"; import { ThemeProvider, useTheme } from "@/lib/contexts/theme-context"; // 测试组件 function TestComponent() { const { theme, setTheme, isDark } = useTheme(); return (
{theme} {isDark.toString()}
); } describe("ThemeContext", () => { beforeEach(() => { // 清除 localStorage localStorage.clear(); // 清除 document 的 class document.documentElement.classList.remove("dark"); document.body.classList.remove("dark"); }); it("should provide default theme", () => { render( ); expect(screen.getByTestId("theme").textContent).toBe("light"); expect(screen.getByTestId("isDark").textContent).toBe("false"); }); it("should load theme from localStorage", () => { localStorage.setItem("theme", "dark"); render( ); expect(screen.getByTestId("theme").textContent).toBe("dark"); expect(screen.getByTestId("isDark").textContent).toBe("true"); }); it("should apply dark class to document", () => { localStorage.setItem("theme", "dark"); render( ); expect(document.documentElement.classList.contains("dark")).toBe(true); expect(document.body.classList.contains("dark")).toBe(true); }); });