1
+ import { NodeBackend } from '../../src' ;
1
2
import { LinkedErrors } from '../../src/integrations/linkederrors' ;
2
3
3
4
let linkedErrors : LinkedErrors ;
@@ -24,12 +25,9 @@ describe('LinkedErrors', () => {
24
25
25
26
it ( 'should bail out if event contains exception, but no hint' , async ( ) => {
26
27
const spy = jest . spyOn ( linkedErrors , 'walkErrorTree' ) ;
27
- const event = {
28
- exception : {
29
- values : [ ] ,
30
- } ,
31
- message : 'foo' ,
32
- } ;
28
+ const one = new Error ( 'originalException' ) ;
29
+ const backend = new NodeBackend ( { } ) ;
30
+ const event = await backend . eventFromException ( one ) ;
33
31
const result = await linkedErrors . handler ( event ) ;
34
32
expect ( spy . mock . calls . length ) . toEqual ( 0 ) ;
35
33
expect ( result ) . toEqual ( event ) ;
@@ -42,79 +40,92 @@ describe('LinkedErrors', () => {
42
40
resolve ( [ ] ) ;
43
41
} ) ,
44
42
) ;
45
- const event = {
46
- exception : {
47
- values : [ ] ,
48
- } ,
49
- message : 'foo' ,
50
- } ;
51
- const hint = {
52
- originalException : new Error ( 'originalException' ) ,
53
- } ;
54
- await linkedErrors . handler ( event , hint ) ;
43
+ const one = new Error ( 'originalException' ) ;
44
+ const backend = new NodeBackend ( { } ) ;
45
+ const event = await backend . eventFromException ( one ) ;
46
+ await linkedErrors . handler ( event , {
47
+ originalException : one ,
48
+ } ) ;
55
49
expect ( spy . mock . calls . length ) . toEqual ( 1 ) ;
56
50
} ) ;
57
51
58
52
it ( 'should recursively walk error to find linked exceptions and assign them to the event' , async ( ) => {
59
- const event = {
60
- exception : {
61
- values : [ ] ,
62
- } ,
63
- message : 'foo' ,
64
- } ;
65
-
66
53
const one : ExtendedError = new Error ( 'one' ) ;
67
54
const two : ExtendedError = new TypeError ( 'two' ) ;
68
55
const three : ExtendedError = new SyntaxError ( 'three' ) ;
69
-
70
- const originalException = one ;
71
56
one . cause = two ;
72
57
two . cause = three ;
73
58
59
+ const backend = new NodeBackend ( { } ) ;
60
+ const event = await backend . eventFromException ( one ) ;
74
61
const result = await linkedErrors . handler ( event , {
75
- originalException,
62
+ originalException : one ,
76
63
} ) ;
77
64
78
- // It shouldn't include root exception, as it's already processed in the event by the main error handler
79
- expect ( result ! . exception ! . values ! . length ) . toEqual ( 2 ) ;
80
- expect ( result ! . exception ! . values ! [ 0 ] . type ) . toEqual ( 'TypeError' ) ;
81
- expect ( result ! . exception ! . values ! [ 0 ] . value ) . toEqual ( 'two' ) ;
65
+ expect ( result ! . exception ! . values ! . length ) . toEqual ( 3 ) ;
66
+ expect ( result ! . exception ! . values ! [ 0 ] . type ) . toEqual ( 'SyntaxError' ) ;
67
+ expect ( result ! . exception ! . values ! [ 0 ] . value ) . toEqual ( 'three' ) ;
82
68
expect ( result ! . exception ! . values ! [ 0 ] . stacktrace ) . toHaveProperty ( 'frames' ) ;
83
- expect ( result ! . exception ! . values ! [ 1 ] . type ) . toEqual ( 'SyntaxError ' ) ;
84
- expect ( result ! . exception ! . values ! [ 1 ] . value ) . toEqual ( 'three ' ) ;
69
+ expect ( result ! . exception ! . values ! [ 1 ] . type ) . toEqual ( 'TypeError ' ) ;
70
+ expect ( result ! . exception ! . values ! [ 1 ] . value ) . toEqual ( 'two ' ) ;
85
71
expect ( result ! . exception ! . values ! [ 1 ] . stacktrace ) . toHaveProperty ( 'frames' ) ;
72
+ expect ( result ! . exception ! . values ! [ 2 ] . type ) . toEqual ( 'Error' ) ;
73
+ expect ( result ! . exception ! . values ! [ 2 ] . value ) . toEqual ( 'one' ) ;
74
+ expect ( result ! . exception ! . values ! [ 2 ] . stacktrace ) . toHaveProperty ( 'frames' ) ;
86
75
} ) ;
87
76
88
77
it ( 'should allow to change walk key' , async ( ) => {
89
78
linkedErrors = new LinkedErrors ( {
90
79
key : 'reason' ,
91
80
} ) ;
92
- const event = {
93
- exception : {
94
- values : [ ] ,
95
- } ,
96
- message : 'foo' ,
97
- } ;
98
81
99
82
const one : ExtendedError = new Error ( 'one' ) ;
100
83
const two : ExtendedError = new TypeError ( 'two' ) ;
101
84
const three : ExtendedError = new SyntaxError ( 'three' ) ;
102
-
103
- const originalException = one ;
104
85
one . reason = two ;
105
86
two . reason = three ;
106
87
88
+ const backend = new NodeBackend ( { } ) ;
89
+ const event = await backend . eventFromException ( one ) ;
90
+ const result = await linkedErrors . handler ( event , {
91
+ originalException : one ,
92
+ } ) ;
93
+
94
+ expect ( result ! . exception ! . values ! . length ) . toEqual ( 3 ) ;
95
+ expect ( result ! . exception ! . values ! [ 0 ] . type ) . toEqual ( 'SyntaxError' ) ;
96
+ expect ( result ! . exception ! . values ! [ 0 ] . value ) . toEqual ( 'three' ) ;
97
+ expect ( result ! . exception ! . values ! [ 0 ] . stacktrace ) . toHaveProperty ( 'frames' ) ;
98
+ expect ( result ! . exception ! . values ! [ 1 ] . type ) . toEqual ( 'TypeError' ) ;
99
+ expect ( result ! . exception ! . values ! [ 1 ] . value ) . toEqual ( 'two' ) ;
100
+ expect ( result ! . exception ! . values ! [ 1 ] . stacktrace ) . toHaveProperty ( 'frames' ) ;
101
+ expect ( result ! . exception ! . values ! [ 2 ] . type ) . toEqual ( 'Error' ) ;
102
+ expect ( result ! .
1241
exception ! . values ! [ 2 ] . value ) . toEqual ( 'one' ) ;
103
+ expect ( result ! . exception ! . values ! [ 2 ] . stacktrace ) . toHaveProperty ( 'frames' ) ;
104
+ } ) ;
105
+
106
+ it ( 'should allow to change stack size limit' , async ( ) => {
107
+ linkedErrors = new LinkedErrors ( {
108
+ limit : 2 ,
109
+ } ) ;
110
+
111
+ const one : ExtendedError = new Error ( 'one' ) ;
112
+ const two : ExtendedError = new TypeError ( 'two' ) ;
113
+ const three : ExtendedError = new SyntaxError ( 'three' ) ;
114
+ one . cause = two ;
115
+ two . cause = three ;
116
+
117
+ const backend = new NodeBackend ( { } ) ;
118
+ const event = await backend . eventFromException ( one ) ;
107
119
const result = await linkedErrors . handler ( event , {
108
- originalException,
120
+ originalException : one ,
109
121
} ) ;
110
122
111
- // It shouldn't include root exception, as it's already processed in the event by the main error handler
112
123
expect ( result ! . exception ! . values ! . length ) . toEqual ( 2 ) ;
113
124
expect ( result ! . exception ! . values ! [ 0 ] . type ) . toEqual ( 'TypeError' ) ;
114
125
expect ( result ! . exception ! . values ! [ 0 ] . value ) . toEqual ( 'two' ) ;
115
126
expect ( result ! . exception ! . values ! [ 0 ] . stacktrace ) . toHaveProperty ( 'frames' ) ;
116
- expect ( result ! . exception ! . values ! [ 1 ] . type ) . toEqual ( 'SyntaxError ' ) ;
117
- expect ( result ! . exception ! . values ! [ 1 ] . value ) . toEqual ( 'three ' ) ;
127
+ expect ( result ! . exception ! . values ! [ 1 ] . type ) . toEqual ( 'Error ' ) ;
128
+ expect ( result ! . exception ! . values ! [ 1 ] . value ) . toEqual ( 'one ' ) ;
118
129
expect ( result ! . exception ! . values ! [ 1 ] . stacktrace ) . toHaveProperty ( 'frames' ) ;
119
130
} ) ;
120
131
} ) ;
0 commit comments