/** * AppLayout 组件测试 */ import React from "react" import { describe, it, expect, vi } from "vitest" import { render, screen } from "@testing-library/react" import { MemoryRouter } from "react-router-dom" // mock Header 组件 vi.mock("@/components/layout/Header", () => ({ default: () =>
Mock Header
, })) // mock Outlet vi.mock("react-router-dom", async () => { const actual = await vi.importActual("react-router-dom") return { ...actual, Outlet: () =>
Outlet Content
, } }) import AppLayout from "@/components/layout/AppLayout" const renderWithRouter = (ui: React.ReactElement) => { return render({ui}) } describe("AppLayout", () => { it("应该渲染 Header", () => { renderWithRouter(侧边栏} />) expect(screen.getByTestId("mock-header")).toBeInTheDocument() }) it("应该渲染侧边栏", () => { renderWithRouter(侧边栏内容} />) expect(screen.getByTestId("sidebar")).toBeInTheDocument() }) it("应该渲染 Outlet 内容", () => { renderWithRouter(侧边栏} />) expect(screen.getByTestId("mock-outlet")).toBeInTheDocument() }) it("应该包含正确的语义化结构", () => { const { container } = renderWithRouter(侧边栏} />) expect(container.querySelector(".xx-app-shell")).toBeInTheDocument() expect(container.querySelector(".xx-app-body")).toBeInTheDocument() expect(container.querySelector(".xx-app-content")).toBeInTheDocument() expect(container.querySelector("main")).toBeInTheDocument() }) })