fix(test): Header.test.tsx antd/icons mock 透传缺失导出(修复 Typography 未定义) (#1947)
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 1s
CI/CD Pipeline / Check push changed paths (push) Successful in 13s
CI/CD Pipeline / Build Staging API Image (push) Successful in 55s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 55s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 1m29s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 48s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 3m0s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 4m28s
CI/CD Pipeline / Validate - Style (push) Successful in 4m36s
CI/CD Pipeline / Validate - Security (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
CI/CD Pipeline / PR Build Web Image (push) Failing after 8h36m53s
CI/CD Pipeline / Retag skipped Staging Web Image (push) Failing after 8h34m18s
CI/CD Pipeline / Retag skipped Staging API Image (push) Failing after 8h34m18s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 8h36m4s
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Failing after 8h34m18s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 8h36m3s
CI/CD Pipeline / PR Build API Image (push) Failing after 8h36m3s
CI/CD Pipeline / Frontend Lint (push) Failing after 8h35m58s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 1s
CI/CD Pipeline / Check push changed paths (push) Successful in 13s
CI/CD Pipeline / Build Staging API Image (push) Successful in 55s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 55s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 1m29s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 48s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 3m0s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 4m28s
CI/CD Pipeline / Validate - Style (push) Successful in 4m36s
CI/CD Pipeline / Validate - Security (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
CI/CD Pipeline / PR Build Web Image (push) Failing after 8h36m53s
CI/CD Pipeline / Retag skipped Staging Web Image (push) Failing after 8h34m18s
CI/CD Pipeline / Retag skipped Staging API Image (push) Failing after 8h34m18s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 8h36m4s
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Failing after 8h34m18s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 8h36m3s
CI/CD Pipeline / PR Build API Image (push) Failing after 8h36m3s
CI/CD Pipeline / Frontend Lint (push) Failing after 8h35m58s
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com> Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
This commit was merged in pull request #1947.
This commit is contained in:
@@ -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", () => ({}))
|
||||
|
||||
Reference in New Issue
Block a user