refactor: 侧边栏折叠按钮从 Header 移至侧边栏底部
- 移除 Header 左侧折叠按钮,改用 TDesign Menu operations 渲染底部折叠按钮 - Header 品牌名与版本号使用 brand-group 基线对齐 - 侧边栏折叠宽度从 80px 对齐 TDesign 默认 64px - 更新相关测试和 DEVELOPMENT.md 文档
This commit is contained in:
@@ -44,4 +44,21 @@ describe("App", () => {
|
||||
expect(screen.getAllByText("用户管理").length).toBeGreaterThan(0);
|
||||
expect(screen.getAllByText("系统设置").length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
test("Header 不包含侧边栏折叠按钮", () => {
|
||||
window.fetch = (async () => {
|
||||
return new Response(
|
||||
JSON.stringify({ ok: true, service: "test-app", timestamp: new Date().toISOString(), version: "0.1.0" }),
|
||||
{
|
||||
headers: { "Content-Type": "application/json" },
|
||||
status: 200,
|
||||
},
|
||||
);
|
||||
}) as unknown as typeof fetch;
|
||||
|
||||
renderWithProviders(createElement(App));
|
||||
|
||||
const toggleButtons = document.querySelectorAll(".app-sidebar-toggle");
|
||||
expect(toggleButtons.length).toBe(0);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* eslint-disable @typescript-eslint/no-empty-function */
|
||||
import { screen } from "@testing-library/react";
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { createElement } from "react";
|
||||
@@ -7,7 +8,7 @@ import { renderWithProviders } from "../../test-utils";
|
||||
|
||||
describe("Sidebar", () => {
|
||||
test("渲染菜单项", () => {
|
||||
renderWithProviders(createElement(Sidebar, { collapsed: false }));
|
||||
renderWithProviders(createElement(Sidebar, { collapsed: false, onToggleCollapsed: () => {} }));
|
||||
|
||||
expect(screen.getByText("仪表盘")).not.toBeNull();
|
||||
expect(screen.getByText("用户管理")).not.toBeNull();
|
||||
@@ -15,7 +16,7 @@ describe("Sidebar", () => {
|
||||
});
|
||||
|
||||
test("折叠状态下仍渲染菜单项", () => {
|
||||
renderWithProviders(createElement(Sidebar, { collapsed: true }));
|
||||
renderWithProviders(createElement(Sidebar, { collapsed: true, onToggleCollapsed: () => {} }));
|
||||
|
||||
expect(screen.getByText("仪表盘")).not.toBeNull();
|
||||
expect(screen.getByText("用户管理")).not.toBeNull();
|
||||
@@ -23,7 +24,42 @@ describe("Sidebar", () => {
|
||||
});
|
||||
|
||||
test("高亮当前路由对应的菜单项", () => {
|
||||
renderWithProviders(createElement(Sidebar, { collapsed: false }), { initialRoute: "/users" });
|
||||
renderWithProviders(createElement(Sidebar, { collapsed: false, onToggleCollapsed: () => {} }), {
|
||||
initialRoute: "/users",
|
||||
});
|
||||
|
||||
const activeItem = document.querySelector(".t-is-active");
|
||||
expect(activeItem).not.toBeNull();
|
||||
expect(activeItem?.textContent).toContain("用户管理");
|
||||
});
|
||||
|
||||
test("展开态底部渲染折叠按钮", () => {
|
||||
renderWithProviders(createElement(Sidebar, { collapsed: false, onToggleCollapsed: () => {} }));
|
||||
|
||||
const collapseBtn = document.querySelector(".app-sidebar-collapse-btn");
|
||||
expect(collapseBtn).not.toBeNull();
|
||||
});
|
||||
|
||||
test("点击底部按钮调用 onToggleCollapsed", () => {
|
||||
let called = false;
|
||||
const onToggle = () => {
|
||||
called = true;
|
||||
};
|
||||
renderWithProviders(createElement(Sidebar, { collapsed: false, onToggleCollapsed: onToggle }));
|
||||
|
||||
const btn = document.querySelector<HTMLButtonElement>(".app-sidebar-collapse-btn");
|
||||
expect(btn).not.toBeNull();
|
||||
btn!.click();
|
||||
expect(called).toBe(true);
|
||||
});
|
||||
|
||||
test("折叠态底部按钮仍渲染且菜单项高亮不变", () => {
|
||||
renderWithProviders(createElement(Sidebar, { collapsed: true, onToggleCollapsed: () => {} }), {
|
||||
initialRoute: "/users",
|
||||
});
|
||||
|
||||
const collapseBtn = document.querySelector(".app-sidebar-collapse-btn");
|
||||
expect(collapseBtn).not.toBeNull();
|
||||
|
||||
const activeItem = document.querySelector(".t-is-active");
|
||||
expect(activeItem).not.toBeNull();
|
||||
|
||||
Reference in New Issue
Block a user