feat(web): 前端共享基础(focusRing/proseBody/text-2xs + useBodyScrollLock + Toast撤销 + error/not-found/loading路由边界)

This commit is contained in:
Yaojia Wang
2026-06-30 08:35:52 +02:00
parent 69f3c2a29b
commit a22a16c9c4
9 changed files with 245 additions and 23 deletions

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