Skip to content

Commit 1d7b08f

Browse files
committed
ref(tests): Update replay integration tests to avoid flakes.
1 parent 3ae909b commit 1d7b08f

File tree

8 files changed

+100
-115
lines changed

8 files changed

+100
-115
lines changed

packages/browser-integration-tests/suites/replay/bufferMode/test.ts

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,13 @@ sentryTest(
8484
await reqErrorPromise;
8585
expect(callsToSentry).toEqual(2);
8686

87-
await page.evaluate(async () => {
88-
const replayIntegration = (window as unknown as Window & { Replay: Replay }).Replay;
89-
await replayIntegration.flush();
90-
});
91-
92-
const req0 = await reqPromise0;
87+
const [, req0] = await Promise.all([
88+
await page.evaluate(async () => {
89+
const replayIntegration = (window as unknown as Window & { Replay: Replay }).Replay;
90+
await replayIntegration.flush();
91+
}),
92+
reqPromise0,
93+
]);
9394

9495
// 2 errors, 1 flush
9596
await reqErrorPromise;
@@ -226,12 +227,13 @@ sentryTest(
226227
await reqErrorPromise;
227228
expect(callsToSentry).toEqual(2);
228229

229-
await page.evaluate(async () => {
230-
const replayIntegration = (window as unknown as Window & { Replay: Replay }).Replay;
231-
await replayIntegration.flush({ continueRecording: false });
232-
});
233-
234-
const req0 = await reqPromise0;
230+
const [, req0] = await Promise.all([
231+
page.evaluate(async () => {
232+
const replayIntegration = (window as unknown as Window & { Replay: Replay }).Replay;
233+
await replayIntegration.flush({ continueRecording: false });
234+
}),
235+
reqPromise0,
236+
]);
235237

236238
// 2 errors, 1 flush
237239
await reqErrorPromise;
@@ -346,9 +348,13 @@ sentryTest(
346348

347349
// Error sample rate is now at 1.0, this error should create a replay
348350
const reqErrorPromise1 = waitForErrorRequest(page);
349-
await page.click('#error2');
350-
// 1 unsampled error, 1 sampled error -> 1 flush
351-
const req0 = await reqPromise0;
351+
const [, req0] = await Promise.all([
352+
page.click('#error2'),
353+
354+
// 1 unsampled error, 1 sampled error -> 1 flush
355+
reqPromise0,
356+
]);
357+
352358
const reqError1 = await reqErrorPromise1;
353359
const errorEvent1 = envelopeRequestParser(reqError1);
354360
expect(callsToSentry).toEqual(3);

packages/browser-integration-tests/suites/replay/captureConsoleLog/test.ts

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ sentryTest('should capture console messages in replay', async ({ getLocalTestPat
1010
sentryTest.skip();
1111
}
1212

13-
const reqPromise0 = waitForReplayRequest(page, 0);
14-
1513
await page.route('https://dsn.ingest.sentry.io/**/*', route => {
1614
return route.fulfill({
1715
status: 200,
@@ -20,10 +18,11 @@ sentryTest('should capture console messages in replay', async ({ getLocalTestPat
2018
});
2119
});
2220

21+
const reqPromise0 = waitForReplayRequest(page, 0);
22+
2323
const url = await getLocalTestPath({ testDir: __dirname });
2424

25-
await page.goto(url);
26-
await reqPromise0;
25+
await Promise.all([page.goto(url), reqPromise0]);
2726

2827
const reqPromise1 = waitForReplayRequest(
2928
page,
@@ -38,11 +37,9 @@ sentryTest('should capture console messages in replay', async ({ getLocalTestPat
3837
await page.click('[data-log]');
3938

4039
// Sometimes this doesn't seem to trigger, so we trigger it twice to be sure...
41-
await page.click('[data-log]');
42-
43-
await forceFlushReplay();
40+
const [, , req1] = await Promise.all([page.click('[data-log]'), forceFlushReplay(), reqPromise1]);
4441

45-
const { breadcrumbs } = getCustomRecordingEvents(await reqPromise1);
42+
const { breadcrumbs } = getCustomRecordingEvents(req1);
4643

4744
expect(breadcrumbs.filter(breadcrumb => breadcrumb.category === 'console')).toEqual(
4845
expect.arrayContaining([
@@ -65,8 +62,6 @@ sentryTest('should capture very large console logs', async ({ getLocalTestPath,
6562
sentryTest.skip();
6663
}
6764

68-
const reqPromise0 = waitForReplayRequest(page, 0);
69-
7065
await page.route('https://dsn.ingest.sentry.io/**/*', route => {
7166
return route.fulfill({
7267
status: 200,
@@ -75,10 +70,11 @@ sentryTest('should capture very large console logs', async ({ getLocalTestPath,
7570
});
7671
});
7772

73+
const reqPromise0 = waitForReplayRequest(page, 0);
74+
7875
const url = await getLocalTestPath({ testDir: __dirname });
7976

80-
await page.goto(url);
81-
await reqPromise0;
77+
await Promise.all([page.goto(url), reqPromise0]);
8278

8379
const reqPromise1 = waitForReplayRequest(
8480
page,
@@ -90,14 +86,9 @@ sentryTest('should capture very large console logs', async ({ getLocalTestPath,
9086
5_000,
9187
);
9288

93-
await page.click('[data-log-large]');
94-
95-
// Sometimes this doesn't seem to trigger, so we trigger it twice to be sure...
96-
await page.click('[data-log-large]');
97-
98-
await forceFlushReplay();
89+
const [, , req1] = await Promise.all([page.click('[data-log-large]'), forceFlushReplay(), reqPromise1]);
9990

100-
const { breadcrumbs } = getCustomRecordingEvents(await reqPromise1);
91+
const { breadcrumbs } = getCustomRecordingEvents(req1);
10192

10293
expect(breadcrumbs.filter(breadcrumb => breadcrumb.category === 'console')).toEqual(
10394
expect.arrayContaining([

packages/browser-integration-tests/suites/replay/errors/errorMode/test.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,26 +50,25 @@ sentryTest(
5050

5151
const url = await getLocalTestPath({ testDir: __dirname });
5252

53-
await page.goto(url);
54-
await page.click('#go-background');
55-
await new Promise(resolve => setTimeout(resolve, 1000));
53+
await Promise.all([
54+
page.goto(url),
55+
page.click('#go-background'),
56+
new Promise(resolve => setTimeout(resolve, 1000)),
57+
]);
5658

5759
expect(callsToSentry).toEqual(0);
5860

59-
await page.click('#error');
60-
const req0 = await reqPromise0;
61+
const [, req0] = await Promise.all([page.click('#error'), reqPromise0]);
6162

6263
expect(callsToSentry).toEqual(2); // 1 error, 1 replay event
6364

64-
await page.click('#go-background');
65-
const req1 = await reqPromise1;
66-
await reqErrorPromise;
65+
const [, req1] = await Promise.all([page.click('#go-background'), reqPromise1, reqErrorPromise]);
6766

6867
expect(callsToSentry).toEqual(3); // 1 error, 2 replay events
6968

7069
await page.click('#log');
71-
await page.click('#go-background');
72-
const req2 = await reqPromise2;
70+
71+
const [, req2] = await Promise.all([page.click('#go-background'), reqPromise2]);
7372

7473
const event0 = getReplayEvent(req0);
7574
const content0 = getReplayRecordingContent(req0);

packages/browser-integration-tests/suites/replay/largeMutations/defaultOptions/test.ts

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ sentryTest(
1010
sentryTest.skip();
1111
}
1212

13-
const reqPromise0 = waitForReplayRequest(page, 0);
14-
1513
await page.route('https://dsn.ingest.sentry.io/**/*', route => {
1614
return route.fulfill({
1715
status: 200,
@@ -20,28 +18,23 @@ sentryTest(
2018
});
2119
});
2220

21+
const reqPromise0 = waitForReplayRequest(page, 0);
22+
2323
const url = await getLocalTestPath({ testDir: __dirname });
2424

25-
await page.goto(url);
26-
const res0 = await reqPromise0;
25+
const [, res0] = await Promise.all([page.goto(url), reqPromise0]);
2726

2827
const reqPromise1 = waitForReplayRequest(page);
2928

30-
void page.click('#button-add');
31-
await forceFlushReplay();
32-
const res1 = await reqPromise1;
29+
const [, , res1] = await Promise.all([page.click('#button-add'), forceFlushReplay(), reqPromise1]);
3330

3431
const reqPromise2 = waitForReplayRequest(page);
3532

36-
void page.click('#button-modify');
37-
await forceFlushReplay();
38-
const res2 = await reqPromise2;
33+
const [, , res2] = await Promise.all([page.click('#button-modify'), forceFlushReplay(), reqPromise2]);
3934

4035
const reqPromise3 = waitForReplayRequest(page);
4136

42-
void page.click('#button-remove');
43-
await forceFlushReplay();
44-
const res3 = await reqPromise3;
37+
const [, , res3] = await Promise.all([page.click('#button-remove'), forceFlushReplay(), reqPromise3]);
4538

4639
const replayData0 = getReplayRecordingContent(res0);
4740
const replayData1 = getReplayRecordingContent(res1);

packages/browser-integration-tests/suites/replay/largeMutations/mutationLimit/test.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ sentryTest(
1515
sentryTest.skip();
1616
}
1717

18-
const reqPromise0 = waitForReplayRequest(page, 0);
19-
2018
await page.route('https://dsn.ingest.sentry.io/**/*', route => {
2119
return route.fulfill({
2220
status: 200,
@@ -25,27 +23,24 @@ sentryTest(
2523
});
2624
});
2725

26+
const reqPromise0 = waitForReplayRequest(page, 0);
27+
2828
const url = await getLocalTestPath({ testDir: __dirname });
2929

30-
await page.goto(url);
31-
const res0 = await reqPromise0;
30+
const [, res0] = await Promise.all([page.goto(url), reqPromise0]);
3231

3332
const reqPromise1 = waitForReplayRequest(page);
3433

35-
void page.click('#button-add');
36-
await forceFlushReplay();
37-
const res1 = await reqPromise1;
34+
const [, , res1] = await Promise.all([page.click('#button-add'), forceFlushReplay(), reqPromise1]);
3835

3936
// replay should be stopped due to mutation limit
4037
let replay = await getReplaySnapshot(page);
4138
expect(replay.session).toBe(undefined);
4239
expect(replay._isEnabled).toBe(false);
4340

44-
void page.click('#button-modify');
45-
await forceFlushReplay();
41+
await Promise.all([page.click('#button-modify'), await forceFlushReplay()]);
4642

47-
await page.click('#button-remove');
48-
await forceFlushReplay();
43+
await Promise.all([page.click('#button-remove'), await forceFlushReplay()]);
4944

5045
const replayData0 = getReplayRecordingContent(res0);
5146
expect(replayData0.fullSnapshots.length).toBe(1);

packages/browser-integration-tests/suites/replay/maxReplayDuration/test.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ sentryTest('keeps track of max duration across reloads', async ({ getLocalTestPa
1111
sentryTest.skip();
1212
}
1313

14-
const reqPromise0 = waitForReplayRequest(page, 0);
15-
const reqPromise1 = waitForReplayRequest(page, 1);
16-
1714
await page.route('https://dsn.ingest.sentry.io/**/*', route => {
1815
return route.fulfill({
1916
status: 200,
@@ -22,33 +19,42 @@ sentryTest('keeps track of max duration across reloads', async ({ getLocalTestPa
2219
});
2320
});
2421

22+
const reqPromise0 = waitForReplayRequest(page, 0);
23+
const reqPromise1 = waitForReplayRequest(page, 1);
24+
2525
const url = await getLocalTestPath({ testDir: __dirname });
2626

2727
await page.goto(url);
2828

2929
await new Promise(resolve => setTimeout(resolve, MAX_REPLAY_DURATION / 2));
3030

31-
await page.reload();
32-
await page.click('#button1');
31+
await Promise.all([page.reload(), page.click('#button1')]);
3332

3433
// After the second reload, we should have a new session (because we exceeded max age)
3534
const reqPromise3 = waitForReplayRequest(page, 0);
3635

3736
await new Promise(resolve => setTimeout(resolve, MAX_REPLAY_DURATION / 2 + 100));
3837

39-
void page.click('#button1');
40-
await page.evaluate(`Object.defineProperty(document, 'visibilityState', {
38+
const [, , req0, req1] = await Promise.all([
39+
page.click('#button1'),
40+
page.evaluate(
41+
`Object.defineProperty(document, 'visibilityState', {
4142
configurable: true,
4243
get: function () {
4344
return 'hidden';
4445
},
4546
});
46-
document.dispatchEvent(new Event('visibilitychange'));`);
4747
48-
const replayEvent0 = getReplayEvent(await reqPromise0);
48+
document.dispatchEvent(new Event('visibilitychange'));`,
49+
),
50+
reqPromise0,
51+
reqPromise1,
52+
]);
53+
54+
const replayEvent0 = getReplayEvent(req0);
4955
expect(replayEvent0).toEqual(getExpectedReplayEvent({}));
5056

51-
const replayEvent1 = getReplayEvent(await reqPromise1);
57+
const replayEvent1 = getReplayEvent(req1);
5258
expect(replayEvent1).toEqual(
5359
getExpectedReplayEvent({
5460
segment_id: 1,

0 commit comments

Comments
 (0)