44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
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(
|
|
<CharacterSwitcher
|
|
currentCharacterId="char_1"
|
|
currentDisplayName="小测"
|
|
/>,
|
|
);
|
|
expect(screen.getByText("小测")).toBeInTheDocument();
|
|
});
|
|
|
|
it("点击展开下拉菜单", async () => {
|
|
const user = userEvent.setup();
|
|
render(
|
|
<CharacterSwitcher
|
|
currentCharacterId="char_1"
|
|
currentDisplayName="小测"
|
|
/>,
|
|
);
|
|
// 当前人物名可点击
|
|
await user.click(screen.getByText("小测"));
|
|
// dropdown 应该出现——因为 listCharacters 返回空列表,
|
|
// 此处只验证下拉渲染不报错
|
|
expect(screen.getByText("小测")).toBeInTheDocument();
|
|
});
|
|
});
|