feat(chat): 引入 @ant-design/x 组件 — Sender/Conversations/XMarkdown 替代手动拼装
- ConfigProvider → XProvider(ConsoleShell + test-utils) - ChatSidebar → Conversations(menu dropdown + MoreOutlined trigger) - ChatInputArea → Sender(footer 左右排版 + 模型 Select + 自动清空) - Streamdown → XMarkdown(streaming hasNextChunk 映射 AI SDK 状态) - CSS 清理 ~94 行废弃样式,新增统一布局规则 - 删除 streamdown 依赖
This commit is contained in:
@@ -51,8 +51,8 @@ void mock.module("ai", () => ({
|
||||
},
|
||||
}));
|
||||
|
||||
function getSendButton() {
|
||||
return screen.getByRole("button", { name: /发.*送/ });
|
||||
function getSenderTextarea() {
|
||||
return screen.getByPlaceholderText("输入消息...");
|
||||
}
|
||||
|
||||
function setupFetchMock() {
|
||||
@@ -90,8 +90,7 @@ describe("ChatPanel", () => {
|
||||
|
||||
expect(screen.getByText("你好,我是阿福")).toBeTruthy();
|
||||
expect(screen.getByText("有什么我可以帮助你的吗?")).toBeTruthy();
|
||||
expect(screen.getByPlaceholderText("输入消息...")).toBeTruthy();
|
||||
expect(getSendButton()).toBeTruthy();
|
||||
expect(getSenderTextarea()).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -108,9 +107,9 @@ describe("ChatPanel", () => {
|
||||
}),
|
||||
);
|
||||
|
||||
const input = screen.getByPlaceholderText("输入消息...");
|
||||
fireEvent.change(input, { target: { value: "你好" } });
|
||||
fireEvent.click(getSendButton());
|
||||
const textarea = getSenderTextarea();
|
||||
fireEvent.change(textarea, { target: { value: "你好" } });
|
||||
fireEvent.keyDown(textarea, { key: "Enter" });
|
||||
|
||||
await waitFor(() => {
|
||||
expect(onCreated).toHaveBeenCalledWith("conv-new");
|
||||
@@ -139,12 +138,12 @@ describe("ChatPanel", () => {
|
||||
}),
|
||||
);
|
||||
|
||||
const input = screen.getByPlaceholderText("输入消息...");
|
||||
fireEvent.change(input, { target: { value: "测试输入" } });
|
||||
fireEvent.click(getSendButton());
|
||||
const textarea = getSenderTextarea();
|
||||
fireEvent.change(textarea, { target: { value: "测试输入" } });
|
||||
fireEvent.keyDown(textarea, { key: "Enter" });
|
||||
|
||||
await waitFor(() => {
|
||||
expect((input as HTMLTextAreaElement).value).toBe("测试输入");
|
||||
expect((textarea as HTMLTextAreaElement).value).toBe("测试输入");
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -161,7 +160,7 @@ describe("ChatPanel", () => {
|
||||
);
|
||||
|
||||
expect(screen.queryByText("你好,我是阿福")).toBeNull();
|
||||
expect(screen.getByPlaceholderText("输入消息...")).toBeTruthy();
|
||||
expect(getSenderTextarea()).toBeTruthy();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { XProvider } from "@ant-design/x";
|
||||
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
||||
import { render } from "@testing-library/react";
|
||||
import { App, ConfigProvider } from "antd";
|
||||
import { App } from "antd";
|
||||
import { mock } from "bun:test";
|
||||
import { createElement, StrictMode } from "react";
|
||||
import { MemoryRouter } from "react-router";
|
||||
@@ -81,7 +82,7 @@ export function renderWithProviders(ui: React.ReactElement, options?: RenderWith
|
||||
createElement(
|
||||
MemoryRouter,
|
||||
{ initialEntries: [initialRoute] },
|
||||
createElement(ConfigProvider, null, createElement(App, null, ui)),
|
||||
createElement(XProvider, null, createElement(App, null, ui)),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user