From c49b1ff54373ac9a3e29f0f3146d341e293b100a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sat, 5 Sep 2026 20:10:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=94=99=E8=AF=AF=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E5=8A=A0=E8=BD=BD=E5=A4=B1=E8=B4=A5=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 区分错误事件读取失败与空事件列表 增加错误状态回归测试 --- .../components/error-report/ErrorReportDialog.tsx | 6 +++++- .../tests/ErrorReportDialog.test.tsx | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/ai-game-creator-shell/src/components/error-report/ErrorReportDialog.tsx b/apps/ai-game-creator-shell/src/components/error-report/ErrorReportDialog.tsx index 8eb7a4086..c86b81a16 100644 --- a/apps/ai-game-creator-shell/src/components/error-report/ErrorReportDialog.tsx +++ b/apps/ai-game-creator-shell/src/components/error-report/ErrorReportDialog.tsx @@ -29,6 +29,7 @@ function diagnosticLogLabel( export function ErrorReportDialog({ open, onClose }: ErrorReportDialogProps) { const [events, setEvents] = useState([]); const [eventsReady, setEventsReady] = useState(false); + const [eventsError, setEventsError] = useState(false); const [selectedFingerprints, setSelectedFingerprints] = useState>( new Set(), ); @@ -46,6 +47,7 @@ export function ErrorReportDialog({ open, onClose }: ErrorReportDialogProps) { let disposed = false; setEvents([]); setEventsReady(false); + setEventsError(false); setSelectedFingerprints(new Set()); setStatus(''); setLogsReady(false); @@ -61,8 +63,8 @@ export function ErrorReportDialog({ open, onClose }: ErrorReportDialogProps) { }) .catch(() => { if (disposed) return; + setEventsError(true); setEventsReady(true); - setStatus('错误事件暂不可用,请关闭后重试'); }); void readApplicationDiagnosticLogs() .then((nextLogs) => { @@ -145,6 +147,8 @@ export function ErrorReportDialog({ open, onClose }: ErrorReportDialogProps) { 错误事件({events.length}) {!eventsReady ? (

正在读取当前错误…

+ ) : eventsError ? ( +

错误事件暂不可用,请关闭后重试。

) : events.length ? (
    {events.map((event) => ( diff --git a/apps/ai-game-creator-shell/tests/ErrorReportDialog.test.tsx b/apps/ai-game-creator-shell/tests/ErrorReportDialog.test.tsx index 286429159..33ca9afc1 100644 --- a/apps/ai-game-creator-shell/tests/ErrorReportDialog.test.tsx +++ b/apps/ai-game-creator-shell/tests/ErrorReportDialog.test.tsx @@ -52,4 +52,16 @@ describe('ErrorReportDialog', () => { expect(await screen.findByText(event.message)).toBeTruthy(); expect(mockState.getPending).toHaveBeenCalledTimes(1); }); + + it('读取错误事件失败时显示不可用状态而不是空列表', async () => { + mockState.getPending.mockRejectedValue(new Error('读取失败')); + mockState.readLogs.mockResolvedValue([]); + + render(); + + expect( + await screen.findByText('错误事件暂不可用,请关闭后重试。'), + ).toBeTruthy(); + expect(screen.queryByText('当前没有待报告的错误。')).toBeNull(); + }); });