feat(web): 前端共享基础(focusRing/proseBody/text-2xs + useBodyScrollLock + Toast撤销 + error/not-found/loading路由边界)
This commit is contained in:
41
apps/web/lib/ui/useBodyScrollLock.test.ts
Normal file
41
apps/web/lib/ui/useBodyScrollLock.test.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
// @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");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user