// @vitest-environment jsdom import { renderHook } from "@testing-library/react"; import { afterEach, describe, expect, it } from "vitest"; import { useBodyScrollLock } from "./useBodyScrollLock"; describe("useBodyScrollLock", () => { afterEach(() => { document.body.style.overflow = ""; }); it("active 时锁定 body 滚动", () => { renderHook(() => useBodyScrollLock(true)); expect(document.body.style.overflow).toBe("hidden"); }); it("active 为假时不改动 overflow", () => { document.body.style.overflow = "scroll"; renderHook(() => useBodyScrollLock(false)); expect(document.body.style.overflow).toBe("scroll"); }); it("卸载时恢复原 overflow 值", () => { document.body.style.overflow = "auto"; const { unmount } = renderHook(() => useBodyScrollLock(true)); expect(document.body.style.overflow).toBe("hidden"); unmount(); expect(document.body.style.overflow).toBe("auto"); }); it("active 由真转假时恢复原值", () => { document.body.style.overflow = "visible"; const { rerender } = renderHook( ({ active }: { active: boolean }) => useBodyScrollLock(active), { initialProps: { active: true } }, ); expect(document.body.style.overflow).toBe("hidden"); rerender({ active: false }); expect(document.body.style.overflow).toBe("visible"); }); });