修复错误报告加载失败提示
区分错误事件读取失败与空事件列表 增加错误状态回归测试
This commit is contained in:
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user