import { fireEvent, render, screen } from "@testing-library/react"; import { expect, test, vi } from "vitest"; import { MemoryRouter, Route, Routes, useLocation } from "react-router-dom"; import { QueryProvider } from "@/shared/query/QueryProvider.jsx"; import { getAppUser } from "@/features/app-users/api"; import { AppUserDetailPage } from "@/features/app-users/pages/AppUserDetailPage.jsx"; // AppUserDetailView 会静态导入 issueAppUserAccessToken,mock 工厂缺少该导出会直接导致模块加载失败。 vi.mock("@/features/app-users/api", () => ({ getAppUser: vi.fn(), issueAppUserAccessToken: vi.fn() })); test("full user detail route loads the URL user and returns to its source list", async () => { vi.mocked(getAppUser).mockResolvedValue({ age: 24, defaultDisplayUserId: "163337", gender: "female", levels: { charm: { displayLevel: 3, realLevel: 3 }, game: { displayLevel: 6, realLevel: 6 }, wealth: { displayLevel: 4, realLevel: 4 }, }, status: "active", userId: "10001", username: "tester", vip: { active: false, level: 0 }, }); render( } /> } /> , ); expect((await screen.findAllByText("tester")).length).toBeGreaterThan(0); expect(getAppUser).toHaveBeenCalledWith("10001"); expect(screen.getByRole("tab", { name: "总览" })).toBeInTheDocument(); expect(screen.queryByRole("link", { name: /完整详情/ })).not.toBeInTheDocument(); fireEvent.click(screen.getByRole("button", { name: /返回用户列表/ })); expect(await screen.findByTestId("location-value")).toHaveTextContent("/app/users?status=active"); }); function LocationValue() { const location = useLocation(); return {`${location.pathname}${location.search}`}; }