diff --git a/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectConversation/DirectProjectConversation.test.tsx b/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectConversation/DirectProjectConversation.test.tsx index a85c6a51a..3dc7c91b2 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectConversation/DirectProjectConversation.test.tsx +++ b/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectConversation/DirectProjectConversation.test.tsx @@ -136,6 +136,25 @@ describe('更早历史的入口', () => { fireEvent.click(view.getByText('重试')); expect(retry).toHaveBeenCalledTimes(1); }); + + it('断言式 live region 里不放可交互控件:重试按钮是 alert 之外的兄弟', () => { + const retry = vi.fn(); + const view = renderConversation({ + historyHasMore: true, + historyError: '读取更早的对话历史失败', + onRetryEarlierHistory: retry, + }); + + // `role="alert"` 隐含 aria-live="assertive" + aria-atomic="true":整段会被当成一条断言性 + // 播报,交互控件嵌在里面既可能不被读屏当成可聚焦按钮,点击也落在 live region 内部。 + const alert = view.getByRole('alert'); + expect(alert.textContent).toContain('加载更早对话失败'); + expect(alert.contains(view.getByText('重试'))).toBe(false); + + // 拆开之后仍在同一行里,重试仍是唯一的手动出路。 + fireEvent.click(view.getByText('重试')); + expect(retry).toHaveBeenCalledTimes(1); + }); }); describe('前插锚点的标记', () => { diff --git a/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectConversation/DirectProjectHistoryRow.tsx b/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectConversation/DirectProjectHistoryRow.tsx index 66672ce56..8e00c099c 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectConversation/DirectProjectHistoryRow.tsx +++ b/apps/ai-game-creator-shell/src/view/project-development/chat/components/DirectProjectConversation/DirectProjectHistoryRow.tsx @@ -37,11 +37,10 @@ export function DirectProjectHistoryErrorRow({ onRetry: () => void; }) { return ( -
- {HISTORY_ERROR_TEXT} +