Skip to content

Commit 2164795

Browse files
CopilotLms24
andauthored
fix(browser-tests): fix flaky sessions route-lifecycle test by replacing timeout-based approach with sequential waitForSession
The test was flaky because getMultipleSentryEnvelopeRequests starts a 4000ms timeout before page.goto, so the timeout could expire before all 4 session envelopes arrived. Replaced with the robust sequential waitForSession pattern (used in start-session, initial-scope, user tests) that deterministically waits for each session individually. Co-Authored-By: Claude <noreply@anthropic.com> Agent-Logs-Url: https://github.com/getsentry/sentry-javascript/sessions/443b2c75-cf14-4a37-8212-6a532959da82 Co-authored-by: Lms24 <8420481+Lms24@users.noreply.github.com>
1 parent a269c24 commit 2164795

File tree

1 file changed

+15
-12
lines changed
  • dev-packages/browser-integration-tests/suites/sessions/route-lifecycle

1 file changed

+15
-12
lines changed
Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
import { expect } from '@playwright/test';
2-
import type { SerializedSession } from '@sentry/core/src';
32
import { sentryTest } from '../../../utils/fixtures';
4-
import { getMultipleSentryEnvelopeRequests } from '../../../utils/helpers';
3+
import { waitForSession } from '../../../utils/helpers';
54

65
sentryTest(
76
'should start new sessions on pushState navigation with route lifecycle (default).',
87
async ({ getLocalTestUrl, page }) => {
98
const url = await getLocalTestUrl({ testDir: __dirname });
109

11-
const sessionsPromise = getMultipleSentryEnvelopeRequests<SerializedSession>(page, 10, {
12-
url,
13-
envelopeType: 'session',
14-
timeout: 4000,
15-
});
10+
const initSessionPromise = waitForSession(page, s => !!s.init && s.status === 'ok');
11+
await page.goto(url);
12+
const initSession = await initSessionPromise;
1613

17-
await page.waitForSelector('#navigate');
18-
19-
await page.locator('#navigate').click();
14+
const session1Promise = waitForSession(page, s => !!s.init && s.status === 'ok' && s.sid !== initSession.sid);
2015
await page.locator('#navigate').click();
16+
const session1 = await session1Promise;
17+
18+
const session2Promise = waitForSession(page, s => !!s.init && s.status === 'ok' && s.sid !== session1.sid);
2119
await page.locator('#navigate').click();
20+
const session2 = await session2Promise;
2221

23-
const startedSessions = (await sessionsPromise).filter(session => session.init);
22+
const session3Promise = waitForSession(page, s => !!s.init && s.status === 'ok' && s.sid !== session2.sid);
23+
await page.locator('#navigate').click();
24+
const session3 = await session3Promise;
2425

25-
expect(startedSessions.length).toBe(4);
26+
// Verify we got 4 distinct init sessions (1 initial + 3 navigations)
27+
const sids = new Set([initSession.sid, session1.sid, session2.sid, session3.sid]);
28+
expect(sids.size).toBe(4);
2629
},
2730
);

0 commit comments

Comments
 (0)