56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
/** @vitest-environment jsdom */
|
|
|
|
import { cleanup, render, screen } from '@testing-library/react';
|
|
import type { ReactNode } from 'react';
|
|
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
const mockState = vi.hoisted(() => ({
|
|
getPending: vi.fn(),
|
|
readLogs: vi.fn(),
|
|
}));
|
|
|
|
vi.mock('../src/services/errorReporting', () => ({
|
|
ackClientErrorEventsWithRetry: vi.fn(),
|
|
getPendingClientErrorEvents: mockState.getPending,
|
|
getStableErrorReportSubmissionId: vi.fn(),
|
|
readApplicationDiagnosticLogs: mockState.readLogs,
|
|
submitErrorReportBatch: vi.fn(),
|
|
}));
|
|
|
|
vi.mock('../src/components/modal/ThemedModal', () => ({
|
|
ThemedModal: ({ open, children }: { open: boolean; children: ReactNode }) =>
|
|
open ? <div role="dialog">{children}</div> : null,
|
|
}));
|
|
|
|
import { ErrorReportDialog } from '../src/components/error-report/ErrorReportDialog';
|
|
|
|
const event = {
|
|
eventId: 'rust-error-1',
|
|
fingerprint: 'fingerprint-1',
|
|
source: 'test',
|
|
message: '打开面板时读取的错误',
|
|
occurredAt: '1',
|
|
count: 1,
|
|
};
|
|
|
|
describe('ErrorReportDialog', () => {
|
|
afterEach(() => {
|
|
cleanup();
|
|
mockState.getPending.mockReset();
|
|
mockState.readLogs.mockReset();
|
|
});
|
|
|
|
it('只在面板打开时读取最新错误快照', async () => {
|
|
mockState.getPending.mockResolvedValue([event]);
|
|
mockState.readLogs.mockResolvedValue([]);
|
|
|
|
const view = render(<ErrorReportDialog open={false} onClose={vi.fn()} />);
|
|
expect(mockState.getPending).not.toHaveBeenCalled();
|
|
|
|
view.rerender(<ErrorReportDialog open onClose={vi.fn()} />);
|
|
|
|
expect(await screen.findByText(event.message)).toBeTruthy();
|
|
expect(mockState.getPending).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|