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);
});
});