feat: 聊天室对话渲染增强 - 思考内容Markdown渲染 + 工具调用参数卡片化

This commit is contained in:
2026-06-07 18:27:41 +08:00
parent 1d82f4f961
commit a389888eb4
9 changed files with 335 additions and 81 deletions

View File

@@ -1,5 +1,5 @@
import { describe, expect, test } from "bun:test";
import { screen } from "@testing-library/react";
import { fireEvent, screen } from "@testing-library/react";
import { createElement } from "react";
import { ToolPart } from "../../../../src/web/features/chat/parts/ToolPart";
@@ -63,3 +63,72 @@ describe("ToolPart 工具显示名", () => {
expect(screen.getByText(/获取当前时间.*失败/)).toBeTruthy();
});
});
describe("ToolPart 入参/出参分层展示", () => {
test("输入流式状态时面板展开显示入参区块标题", () => {
const part = {
input: { timezone: "Asia/Shanghai" },
toolCallId: "call-stream",
toolName: "getCurrentTime",
type: "tool-getCurrentTime",
};
renderWithProviders(createElement(ToolPart, { part }));
const inputLabels = screen.getAllByText("入参");
expect(inputLabels.length).toBeGreaterThan(0);
});
test("点击面板展开后显示入参出参区块", () => {
const part = {
input: { timezone: "Asia/Shanghai" },
output: { iso: "2024-01-01T00:00:00.000Z" },
toolCallId: "call-1",
toolName: "getCurrentTime",
type: "tool-getCurrentTime",
};
const { container } = renderWithProviders(createElement(ToolPart, { part }));
const header = container.querySelector(".ant-collapse-header");
expect(header).toBeTruthy();
if (header) fireEvent.click(header);
expect(screen.getByText("入参")).toBeTruthy();
expect(screen.getByText("出参")).toBeTruthy();
});
test("输入流式状态时显示生成中文字", () => {
const part = {
toolCallId: "call-stream",
toolName: "getCurrentTime",
type: "tool-getCurrentTime",
};
renderWithProviders(createElement(ToolPart, { part }));
expect(screen.getByText("生成中...")).toBeTruthy();
});
});
describe("ToolPart 错误区块", () => {
test("点击错误面板展开后显示错误标题和错误文本(由 HighlightBlock 渲染)", () => {
const part = {
errorText: "网络超时",
toolCallId: "call-err",
toolName: "getCurrentTime",
type: "tool-getCurrentTime",
};
const { container } = renderWithProviders(createElement(ToolPart, { part }));
const header = container.querySelector(".ant-collapse-header");
expect(header).toBeTruthy();
if (header) fireEvent.click(header);
expect(screen.getByText("错误")).toBeTruthy();
expect(screen.getByText("网络超时")).toBeTruthy();
// 错误文本在 HighlightBlock 中渲染,带 code-block 结构
expect(container.querySelector(".code-block")).toBeTruthy();
});
});