import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { describe, expect, it, vi } from "vitest"; vi.mock("next/navigation", () => ({ useRouter: () => ({ push: vi.fn(), replace: vi.fn() }), })); // 不触发实际的 API 调用 vi.mock("@/lib/api", () => ({ charactersApi: { listCharacters: vi.fn().mockResolvedValue({ items: [], total: 0 }), }, })); import { CharacterSwitcher } from "./CharacterSwitcher"; describe("CharacterSwitcher", () => { it("渲染当前人物名", () => { render( , ); expect(screen.getByText("小测")).toBeInTheDocument(); }); it("点击展开下拉菜单", async () => { const user = userEvent.setup(); render( , ); // 当前人物名可点击 await user.click(screen.getByText("小测")); // dropdown 应该出现——因为 listCharacters 返回空列表, // 此处只验证下拉渲染不报错 expect(screen.getByText("小测")).toBeInTheDocument(); }); });