1
1
import { expect } from '@playwright/test' ;
2
2
3
3
import { sentryTest } from '../../../../utils/fixtures' ;
4
- import { envelopeRequestParser } from '../../../../utils/helpers' ;
4
+ import { envelopeRequestParser , waitForErrorRequest } from '../../../../utils/helpers' ;
5
5
import {
6
6
expectedClickBreadcrumb ,
7
7
expectedConsoleBreadcrumb ,
@@ -10,6 +10,7 @@ import {
10
10
import {
11
11
getReplayEvent ,
12
12
getReplayRecordingContent ,
13
+ isReplayEvent ,
13
14
shouldSkipReplayTest ,
14
15
waitForReplayRequest ,
15
16
} from '../../../../utils/replayHelpers' ;
@@ -26,14 +27,18 @@ sentryTest(
26
27
const reqPromise0 = waitForReplayRequest ( page , 0 ) ;
27
28
const reqPromise1 = waitForReplayRequest ( page , 1 ) ;
28
29
const reqPromise2 = waitForReplayRequest ( page , 2 ) ;
30
+ const reqErrorPromise = waitForErrorRequest ( page ) ;
29
31
30
32
await page . route ( 'https://dsn.ingest.sentry.io/**/*' , route => {
31
33
const event = envelopeRequestParser ( route . request ( ) ) ;
32
34
// error events have no type field
33
35
if ( event && ! event . type && event . event_id ) {
34
36
errorEventId = event . event_id ;
35
37
}
36
- callsToSentry ++ ;
38
+ // We only want to count errors & replays here
39
+ if ( event && ( ! event . type || isReplayEvent ( event ) ) ) {
40
+ callsToSentry ++ ;
41
+ }
37
42
38
43
return route . fulfill ( {
39
44
status : 200 ,
@@ -46,13 +51,16 @@ sentryTest(
46
51
47
52
await page . goto ( url ) ;
48
53
await page . click ( '#go-background' ) ;
54
+ await new Promise ( resolve => setTimeout ( resolve , 1000 ) ) ;
55
+
49
56
expect ( callsToSentry ) . toEqual ( 0 ) ;
50
57
51
58
await page . click ( '#error' ) ;
52
59
const req0 = await reqPromise0 ;
53
60
54
61
await page . click ( '#go-background' ) ;
55
62
const req1 = await reqPromise1 ;
63
+ await reqErrorPromise ;
56
64
57
65
expect ( callsToSentry ) . toEqual ( 3 ) ; // 1 error, 2 replay events
58
66
@@ -69,11 +77,12 @@ sentryTest(
69
77
const event2 = getReplayEvent ( req2 ) ;
70
78
const content2 = getReplayRecordingContent ( req2 ) ;
71
79
80
+ expect ( callsToSentry ) . toBe ( 4 ) ; // 1 error, 3 replay events
81
+
72
82
expect ( event0 ) . toEqual (
73
83
getExpectedReplayEvent ( {
74
84
contexts : { replay : { error_sample_rate : 1 , session_sample_rate : 0 } } ,
75
- // @ts -ignore this is fine
76
- error_ids : [ errorEventId ] ,
85
+ error_ids : [ errorEventId ! ] ,
77
86
replay_type : 'error' ,
78
87
} ) ,
79
88
) ;
@@ -97,7 +106,6 @@ sentryTest(
97
106
expect ( event1 ) . toEqual (
98
107
getExpectedReplayEvent ( {
99
108
contexts : { replay : { error_sample_rate : 1 , session_sample_rate : 0 } } ,
100
- // @ts -ignore this is fine
101
109
replay_type : 'error' , // although we're in session mode, we still send 'error' as replay_type
102
110
replay_start_timestamp : undefined ,
103
111
segment_id : 1 ,
@@ -108,14 +116,12 @@ sentryTest(
108
116
// Also the second snapshot should have a full snapshot, as we switched from error to session
109
117
// mode which triggers another checkout
110
118
expect ( content1 . fullSnapshots ) . toHaveLength ( 1 ) ;
111
- expect ( content1 . incrementalSnapshots ) . toHaveLength ( 0 ) ;
112
119
113
120
// The next event should just be a normal replay event as we're now in session mode and
114
121
// we continue recording everything
115
122
expect ( event2 ) . toEqual (
116
123
getExpectedReplayEvent ( {
117
124
contexts : { replay : { error_sample_rate : 1 , session_sample_rate : 0 } } ,
118
- // @ts -ignore this is fine
119
125
replay_type : 'error' ,
120
126
replay_start_timestamp : undefined ,
121
127
segment_id : 2 ,
0 commit comments