@@ -59,62 +59,58 @@ afterEach(() => {
59
59
60
60
describe ( 'ReactNativeErrorHandlers' , ( ) => {
61
61
describe ( 'onError' , ( ) => {
62
- test ( 'Sets handled:false on a fatal error' , async ( ) => {
63
- // eslint-disable-next-line @typescript-eslint/no-empty-function
64
- let callback : ( error : Error , isFatal : boolean ) => Promise < void > = ( ) =>
65
- Promise . resolve ( ) ;
62
+ let errorHandlerCallback : ( error : Error , isFatal : boolean ) => Promise < void > ;
63
+
64
+ beforeEach ( ( ) => {
65
+ errorHandlerCallback = ( ) => Promise . resolve ( ) ;
66
66
67
67
ErrorUtils . setGlobalHandler = jest . fn ( ( _callback ) => {
68
- callback = _callback as typeof callback ;
68
+ errorHandlerCallback = _callback as typeof errorHandlerCallback ;
69
69
} ) ;
70
70
71
71
const integration = new ReactNativeErrorHandlers ( ) ;
72
72
73
73
integration . setupOnce ( ) ;
74
74
75
- expect ( ErrorUtils . setGlobalHandler ) . toHaveBeenCalledWith ( callback ) ;
75
+ expect ( ErrorUtils . setGlobalHandler ) . toHaveBeenCalledWith ( errorHandlerCallback ) ;
76
+ } ) ;
76
77
77
- await callback ( new Error ( 'Test Error' ) , true ) ;
78
+ test ( 'Sets handled:false on a fatal error' , async ( ) => {
79
+ await errorHandlerCallback ( new Error ( 'Test Error' ) , true ) ;
78
80
79
- const hub = getCurrentHub ( ) ;
80
- // eslint-disable-next-line @typescript-eslint/unbound-method
81
- const mockCall = ( hub . captureEvent as jest . MockedFunction <
82
- typeof hub . captureEvent
83
- > ) . mock . calls [ 0 ] ;
84
- const event = mockCall [ 0 ] ;
81
+ const [ event ] = getActualCaptureEventArgs ( ) ;
85
82
86
83
expect ( event . level ) . toBe ( 'fatal' as SeverityLevel ) ;
87
84
expect ( event . exception ?. values ?. [ 0 ] . mechanism ?. handled ) . toBe ( false ) ;
88
85
expect ( event . exception ?. values ?. [ 0 ] . mechanism ?. type ) . toBe ( 'onerror' ) ;
89
86
} ) ;
90
87
91
88
test ( 'Does not set handled:false on a non-fatal error' , async ( ) => {
92
- // eslint-disable-next-line @typescript-eslint/no-empty-function
93
- let callback : ( error : Error , isFatal : boolean ) => Promise < void > = ( ) =>
94
- Promise . resolve ( ) ;
95
-
96
- ErrorUtils . setGlobalHandler = jest . fn ( ( _callback ) => {
97
- callback = _callback as typeof callback ;
98
- } ) ;
89
+ await errorHandlerCallback ( new Error ( 'Test Error' ) , false ) ;
99
90
100
- const integration = new ReactNativeErrorHandlers ( ) ;
101
-
102
- integration . setupOnce ( ) ;
103
-
104
- expect ( ErrorUtils . setGlobalHandler ) . toHaveBeenCalledWith ( callback ) ;
105
-
106
- await callback ( new Error ( 'Test Error' ) , false ) ;
107
-
108
- const hub = getCurrentHub ( ) ;
109
- // eslint-disable-next-line @typescript-eslint/unbound-method
110
- const mockCall = ( hub . captureEvent as jest . MockedFunction <
111
- typeof hub . captureEvent
112
- > ) . mock . calls [ 0 ] ;
113
- const event = mockCall [ 0 ] ;
91
+ const [ event ] = getActualCaptureEventArgs ( ) ;
114
92
115
93
expect ( event . level ) . toBe ( 'error' as SeverityLevel ) ;
116
94
expect ( event . exception ?. values ?. [ 0 ] . mechanism ?. handled ) . toBe ( true ) ;
117
95
expect ( event . exception ?. values ?. [ 0 ] . mechanism ?. type ) . toBe ( 'generic' ) ;
118
96
} ) ;
97
+
98
+ test ( 'Includes original exception in hint' , async ( ) => {
99
+ await errorHandlerCallback ( new Error ( 'Test Error' ) , false ) ;
100
+
101
+ const [ , hint ] = getActualCaptureEventArgs ( ) ;
102
+
103
+ expect ( hint ) . toEqual ( expect . objectContaining ( { originalException : new Error ( 'Test Error' ) } ) ) ;
104
+ } ) ;
119
105
} ) ;
120
106
} ) ;
107
+
108
+ function getActualCaptureEventArgs ( ) {
109
+ const hub = getCurrentHub ( ) ;
110
+ // eslint-disable-next-line @typescript-eslint/unbound-method
111
+ const mockCall = ( hub . captureEvent as jest . MockedFunction <
112
+ typeof hub . captureEvent
113
+ > ) . mock . calls [ 0 ] ;
114
+
115
+ return mockCall ;
116
+ }
0 commit comments