@@ -43,7 +43,6 @@ function mockEvent(override: Record<string, unknown> = {}): Parameters<Handle>[0
43
43
isDataRequest : false ,
44
44
45
45
...override ,
46
- isSubRequest : false ,
47
46
} ;
48
47
49
48
return event ;
@@ -118,7 +117,6 @@ describe('sentryHandle', () => {
118
117
response = await sentryHandle ( ) ( { event : mockEvent ( ) , resolve : resolve ( type , isError ) } ) ;
119
118
} catch ( e ) {
120
119
expect ( e ) . toBeInstanceOf ( Error ) ;
121
- // @ts -expect-error - this is fine
122
120
expect ( e . message ) . toEqual ( type ) ;
123
121
}
124
122
@@ -152,6 +150,53 @@ describe('sentryHandle', () => {
152
150
expect ( spans ) . toHaveLength ( 1 ) ;
153
151
} ) ;
154
152
153
+ it ( '[kit>=1.21.0] creates a child span for nested server calls (i.e. if there is an active span)' , async ( ) => {
154
+ let _span : Span | undefined = undefined ;
155
+ let txnCount = 0 ;
156
+ client . on ( 'spanEnd' , span => {
157
+ if ( span === getRootSpan ( span ) ) {
158
+ _span = span ;
159
+ ++ txnCount ;
160
+ }
161
+ } ) ;
162
+
163
+ try {
164
+ await sentryHandle ( ) ( {
165
+ event : mockEvent ( ) ,
166
+ resolve : async _ => {
167
+ // simulateing a nested load call:
168
+ await sentryHandle ( ) ( {
169
+ event : mockEvent ( { route : { id : 'api/users/details/[id]' , isSubRequest : true } } ) ,
170
+ resolve : resolve ( type , isError ) ,
171
+ } ) ;
172
+ return mockResponse ;
173
+ } ,
174
+ } ) ;
175
+ } catch ( e ) {
176
+ //
177
+ }
178
+
179
+ expect ( txnCount ) . toEqual ( 1 ) ;
180
+ expect ( _span ! ) . toBeDefined ( ) ;
181
+
182
+ expect ( spanToJSON ( _span ! ) . description ) . toEqual ( 'GET /users/[id]' ) ;
183
+ expect ( spanToJSON ( _span ! ) . op ) . toEqual ( 'http.server' ) ;
184
+ expect ( spanToJSON ( _span ! ) . status ) . toEqual ( isError ? 'internal_error' : 'ok' ) ;
185
+ expect ( spanToJSON ( _span ! ) . data ?. [ SEMANTIC_ATTRIBUTE_SENTRY_SOURCE ] ) . toEqual ( 'route' ) ;
186
+
187
+ expect ( spanToJSON ( _span ! ) . timestamp ) . toBeDefined ( ) ;
188
+
189
+ const spans = getSpanDescendants ( _span ! ) . map ( spanToJSON ) ;
190
+
191
+ expect ( spans ) . toHaveLength ( 2 ) ;
192
+ expect ( spans ) . toEqual (
193
+ expect . arrayContaining ( [
194
+ expect . objectContaining ( { op : 'http.server' , description : 'GET /users/[id]' } ) ,
195
+ expect . objectContaining ( { op : 'http.server' , description : 'GET api/users/details/[id]' } ) ,
196
+ ] ) ,
197
+ ) ;
198
+ } ) ;
199
+
155
200
it ( 'creates a child span for nested server calls (i.e. if there is an active span)' , async ( ) => {
156
201
let _span : Span | undefined = undefined ;
157
202
let txnCount = 0 ;
0 commit comments