修复错误报告加载失败提示

区分错误事件读取失败与空事件列表

增加错误状态回归测试
This commit is contained in:
2026-09-05 20:10:29 +08:00
parent 53e3472922
commit c49b1ff543
2 changed files with 17 additions and 1 deletions
@@ -29,6 +29,7 @@ function diagnosticLogLabel(
export function ErrorReportDialog({ open, onClose }: ErrorReportDialogProps) {
const [events, setEvents] = useState<ClientErrorEvent[]>([]);
const [eventsReady, setEventsReady] = useState(false);
const [eventsError, setEventsError] = useState(false);
const [selectedFingerprints, setSelectedFingerprints] = useState<Set<string>>(
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) {
<strong>{events.length}</strong>
{!eventsReady ? (
<p></p>
) : eventsError ? (
<p role="alert"></p>
) : events.length ? (
<ul className="m-0 mt-2 grid list-none gap-2 p-0">
{events.map((event) => (
@@ -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(<ErrorReportDialog open onClose={vi.fn()} />);
expect(
await screen.findByText('错误事件暂不可用,请关闭后重试。'),
).toBeTruthy();
expect(screen.queryByText('当前没有待报告的错误。')).toBeNull();
});
});