42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
// @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");
|
|
});
|
|
});
|