fix(test): Header.test.tsx antd/icons mock 透传缺失导出(修复 Typography 未定义) #1947

Merged
auto-approve-bot merged 1 commits from fix/header-test-antd-mock into develop 2026-09-16 06:46:48 +08:00
@@ -45,49 +45,60 @@ vi.mock("@/config/navigation", () => ({
],
}))
// mock antd icons
vi.mock("@ant-design/icons", () => ({
LogoutOutlined: () => <span data-testid="logout-icon" />,
SettingOutlined: () => <span data-testid="setting-icon" />,
UserOutlined: () => <span data-testid="user-icon" />,
MenuOutlined: () => <span data-testid="menu-icon" />,
}))
// mock antd icons — 透传未显式 mock 的图标,避免 PointsBadge 等子组件引用新图标时报错
vi.mock("@ant-design/icons", async () => {
const actual = (await vi.importActual<typeof import("@ant-design/icons")>(
"@ant-design/icons",
)) as Record<string, unknown>
return {
...actual,
LogoutOutlined: () => <span data-testid="logout-icon" />,
SettingOutlined: () => <span data-testid="setting-icon" />,
UserOutlined: () => <span data-testid="user-icon" />,
MenuOutlined: () => <span data-testid="menu-icon" />,
}
})
// mock antd components
vi.mock("antd", () => ({
Avatar: ({ children, className }: any) => (
<span data-testid="mock-avatar" className={className}>
{children}
</span>
),
Dropdown: ({ children, menu }: any) => (
<div data-testid="mock-dropdown">
{children}
<div data-testid="dropdown-menu" style={{ display: "none" }}>
{menu.items?.map((item: any, idx: number) => (
<div key={idx} data-testid={`menu-item-${item.key}`} onClick={item.onClick}>
{item.label}
</div>
))}
// mock antd components — 用 importActual 透传未显式覆盖的组件(Popover/Button/Tag/Typography/Badge 等),
// 避免 Header 子组件(PointsBadge)使用新 antd 导出时出现 "No xxx export is defined on the antd mock"
vi.mock("antd", async () => {
const actual = (await vi.importActual<typeof import("antd")>("antd")) as Record<string, unknown>
return {
...actual,
Avatar: ({ children, className }: any) => (
<span data-testid="mock-avatar" className={className}>
{children}
</span>
),
Dropdown: ({ children, menu }: any) => (
<div data-testid="mock-dropdown">
{children}
<div data-testid="dropdown-menu" style={{ display: "none" }}>
{menu.items?.map((item: any, idx: number) => (
<div key={idx} data-testid={`menu-item-${item.key}`} onClick={item.onClick}>
{item.label}
</div>
))}
</div>
</div>
</div>
),
Space: ({ children, className }: any) => (
<div data-testid="mock-space" className={className}>
{children}
</div>
),
Drawer: ({ title, open, children, onClose, placement }: any) =>
open ? (
<div data-testid="mock-drawer" data-placement={placement}>
<div data-testid="drawer-title">{title}</div>
<button data-testid="drawer-close" onClick={onClose}>
Close
</button>
),
Space: ({ children, className }: any) => (
<div data-testid="mock-space" className={className}>
{children}
</div>
) : null,
}))
),
Drawer: ({ title, open, children, onClose, placement }: any) =>
open ? (
<div data-testid="mock-drawer" data-placement={placement}>
<div data-testid="drawer-title">{title}</div>
<button data-testid="drawer-close" onClick={onClose}>
Close
</button>
{children}
</div>
) : null,
}
})
// mock CSS
vi.mock("@/components/layout/Header.css", () => ({}))