import { StackFrame } from 'react-native/Libraries/Core/Devtools/parseErrorStack'; import Logger from '../../core/logging/logger'; import { ErrorAnalysisModule } from '../../core/nativeModules'; import { getSourcemapId, getStackTrace } from '../../error/helpers'; import { reportError } from '../../error/reporting'; jest.mock('../../error/helpers', () => ({ getStackTrace: jest.fn(), getSourcemapId: jest.fn(), })); jest.mock('../../core/nativeModules', () => ({ ErrorAnalysisModule: { reportJavascriptError: jest.fn(), }, })); jest.mock('../../core/logging/logger', () => ({ info: jest.fn(), error: jest.fn(), })); describe('reportError', () => { const error = new Error('Test error'); const mockFrames: StackFrame[] = [ { methodName: 'testMethod', file: 'testFile.js', lineNumber: 10, column: 5, }, ]; beforeEach(() => { jest.clearAllMocks(); (getStackTrace as jest.Mock).mockReturnValue(mockFrames); (getSourcemapId as jest.Mock).mockReturnValue('mockSourceMapId'); }); it('should report a JavaScript error to the native module successfully', async () => { await reportError(error); // Verify the native module was called with the correct data expect(ErrorAnalysisModule.reportJavascriptError).toHaveBeenCalledWith({ appInfo: { jsVersion: undefined, }, exception: { type: 'Error', description: 'Test error', frames: [ { ...mockFrames[0], frameId: 0, }, ], }, timestamp: expect.any(Number), mappingFileId: 'mockSourceMapId', }); // Verify that Logger.info was called expect(Logger.info).toHaveBeenCalledWith( 'Success reporting javascript error to native module.' ); }); it('should log an error when reporting fails', async () => { (ErrorAnalysisModule.reportJavascriptError as jest.Mock).mockRejectedValue( new Error('Mock reporting error') ); await reportError(error); // Verify that Logger.error was called with the correct message expect(Logger.error).toHaveBeenCalledWith( 'Failed to report javascript error to native module: Mock reporting error.' ); }); it('should handle unknown errors gracefully', async () => { (ErrorAnalysisModule.reportJavascriptError as jest.Mock).mockRejectedValue( null ); await reportError(error); // Verify that Logger.error logs an unknown error message expect(Logger.error).toHaveBeenCalledWith( 'Failed to report javascript error to native module: Unknown error occurred.' ); }); });