@@ -43,7 +43,6 @@ function mockEvent(override: Record<string, unknown> = {}): Parameters<Handle>[0
4343 isDataRequest : false ,
4444
4545 ...override ,
46- isSubRequest : false ,
4746 } ;
4847
4948 return event ;
@@ -118,7 +117,6 @@ describe('sentryHandle', () => {
118117 response = await sentryHandle ( ) ( { event : mockEvent ( ) , resolve : resolve ( type , isError ) } ) ;
119118 } catch ( e ) {
120119 expect ( e ) . toBeInstanceOf ( Error ) ;
121- // @ts -expect-error - this is fine
122120 expect ( e . message ) . toEqual ( type ) ;
123121 }
124122
@@ -152,6 +150,53 @@ describe('sentryHandle', () => {
152150 expect ( spans ) . toHaveLength ( 1 ) ;
153151 } ) ;
154152
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+
155200 it ( 'creates a child span for nested server calls (i.e. if there is an active span)' , async ( ) => {
156201 let _span : Span | undefined = undefined ;
157202 let txnCount = 0 ;
0 commit comments