File tree Expand file tree Collapse file tree 3 files changed +76
-0
lines changed
dev-packages/browser-integration-tests/suites/tracing/browserTracingIntegration/async-spans Expand file tree Collapse file tree 3 files changed +76
-0
lines changed Original file line number Diff line number Diff line change
1
+ import * as Sentry from '@sentry/browser' ;
2
+
3
+ window . Sentry = Sentry ;
4
+
5
+ Sentry . init ( {
6
+ dsn :
'https://[email protected] /1337' ,
7
+ integrations : [ Sentry . browserTracingIntegration ( ) ] ,
8
+ tracesSampleRate : 1 ,
9
+ } ) ;
Original file line number Diff line number Diff line change
1
+ import { getActiveSpan , startSpan } from '@sentry/browser' ;
2
+
3
+ const waitForSeconds = seconds => new Promise ( res => setTimeout ( res , seconds * 1000 ) ) ;
4
+
5
+ startSpan ( { name : 'span 1' } , async ( ) => {
6
+ await waitForSeconds ( 1 ) ;
7
+ window . firstWaitingSpan = getActiveSpan ( ) ;
8
+ } ) ;
9
+
10
+ startSpan ( { name : 'span 2' } , async ( ) => {
11
+ await waitForSeconds ( 2 ) ;
12
+ window . secondWaitingSpan = getActiveSpan ( ) ;
13
+ } ) ;
14
+
15
+ startSpan ( { name : 'span 3' } , async ( ) => {
16
+ await waitForSeconds ( 0.5 ) ;
17
+ window . thirdWaitingSpan = getActiveSpan ( ) ;
18
+ } ) ;
19
+
20
+ /**
21
+ * This is what happens here:
22
+ * 1. span 1 starts
23
+ * 2. span 2 starts
24
+ * 3. span 3 starts (span 3 is active now)
25
+ * 4. waiting time in span 3 is over and 'span 3' is stored in variable
26
+ * 5. span 3 ends (2 is active now)
27
+ * 6. waiting time in span 1 is over and 'span 2' is stored in variable
28
+ * 7. span 2 ends (1 is active now)
29
+ * 8. waiting time in span 2 is over and 'span 1' is stored in variable
30
+ */
Original file line number Diff line number Diff line change
1
+ import { expect } from '@playwright/test' ;
2
+ import { sentryTest } from '../../../../utils/fixtures' ;
3
+
4
+ type WindowWithSpan = Window & {
5
+ firstWaitingSpan : any ;
6
+ secondWaitingSpan : any ;
7
+ thirdWaitingSpan : any ;
8
+ } ;
9
+
10
+ sentryTest (
11
+ 'async spans with different durations lead to unexpected behavior in browser (no "asynchronous context tracking")' ,
12
+ async ( { getLocalTestPath, page } ) => {
13
+ const url = await getLocalTestPath ( { testDir : __dirname } ) ;
14
+ page . goto ( url ) ;
15
+
16
+ await page . waitForFunction (
17
+ ( ) =>
18
+ ( window as unknown as WindowWithSpan ) . firstWaitingSpan &&
19
+ ( window as unknown as WindowWithSpan ) . secondWaitingSpan &&
20
+ ( window as unknown as WindowWithSpan ) . thirdWaitingSpan ,
21
+ ) ;
22
+
23
+ const firstWaitingSpanValue = await page . evaluate (
24
+ ( ) => ( window as unknown as WindowWithSpan ) . firstWaitingSpan . _name ,
25
+ ) ;
26
+ const secondWaitingSpanName = await page . evaluate (
27
+ ( ) => ( window as unknown as WindowWithSpan ) . secondWaitingSpan . _name ,
28
+ ) ;
29
+ const thirdWaitingSpanName = await page . evaluate (
30
+ ( ) => ( window as unknown as WindowWithSpan ) . thirdWaitingSpan . _name ,
31
+ ) ;
32
+
33
+ expect ( firstWaitingSpanValue ) . toBe ( 'span 2' ) ;
34
+ expect ( secondWaitingSpanName ) . toBe ( 'span 1' ) ;
35
+ expect ( thirdWaitingSpanName ) . toBe ( 'span 3' ) ;
36
+ } ,
37
+ ) ;
You can’t perform that action at this time.
0 commit comments