Skip to content

Commit abd79ea

Browse files
Lms24lforst
andauthored
test(browser-integration-tests): Test that errors during pageload/navigation have correct trace id (#11610)
Adds two tests to ensure errors thrown during pageload or navigations have the correct traceId. --------- Co-authored-by: Luca Forstner <luca.forstner@sentry.io>
1 parent ac81016 commit abd79ea

File tree

2 files changed

+66
-7
lines changed
  • dev-packages/browser-integration-tests/suites/tracing/trace-lifetime

2 files changed

+66
-7
lines changed

dev-packages/browser-integration-tests/suites/tracing/trace-lifetime/navigation/test.ts

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import { expect } from '@playwright/test';
22
import type { Event } from '@sentry/types';
33
import { sentryTest } from '../../../../utils/fixtures';
4-
import { getFirstSentryEnvelopeRequest, shouldSkipTracingTest } from '../../../../utils/helpers';
4+
import {
5+
getFirstSentryEnvelopeRequest,
6+
getMultipleSentryEnvelopeRequests,
7+
shouldSkipTracingTest,
8+
} from '../../../../utils/helpers';
59

6-
sentryTest('should create a new trace on each navigation', async ({ getLocalTestPath, page }) => {
10+
sentryTest('creates a new trace on each navigation', async ({ getLocalTestPath, page }) => {
711
if (shouldSkipTracingTest()) {
812
sentryTest.skip();
913
}
@@ -32,13 +36,13 @@ sentryTest('error after navigation has navigation traceId', async ({ getLocalTes
3236

3337
const url = await getLocalTestPath({ testDir: __dirname });
3438

35-
// ensure navigation transaction is finished
39+
// ensure pageload transaction is finished
3640
await getFirstSentryEnvelopeRequest<Event>(page, url);
3741

38-
const navigationEvent1 = await getFirstSentryEnvelopeRequest<Event>(page, `${url}#foo`);
39-
expect(navigationEvent1.contexts?.trace?.op).toBe('navigation');
42+
const navigationEvent = await getFirstSentryEnvelopeRequest<Event>(page, `${url}#foo`);
43+
expect(navigationEvent.contexts?.trace?.op).toBe('navigation');
4044

41-
const navigationTraceId = navigationEvent1.contexts?.trace?.trace_id;
45+
const navigationTraceId = navigationEvent.contexts?.trace?.trace_id;
4246
expect(navigationTraceId).toMatch(/^[0-9a-f]{32}$/);
4347

4448
const [, errorEvent] = await Promise.all([
@@ -49,3 +53,30 @@ sentryTest('error after navigation has navigation traceId', async ({ getLocalTes
4953
const errorTraceId = errorEvent.contexts?.trace?.trace_id;
5054
expect(errorTraceId).toBe(navigationTraceId);
5155
});
56+
57+
sentryTest('error during navigation has new navigation traceId', async ({ getLocalTestPath, page }) => {
58+
if (shouldSkipTracingTest()) {
59+
sentryTest.skip();
60+
}
61+
62+
const url = await getLocalTestPath({ testDir: __dirname });
63+
64+
// ensure navigation transaction is finished
65+
await getFirstSentryEnvelopeRequest<Event>(page, url);
66+
67+
const envelopeRequestsPromise = getMultipleSentryEnvelopeRequests<Event>(page, 2);
68+
await page.goto(`${url}#foo`);
69+
await page.locator('#errorBtn').click();
70+
const events = await envelopeRequestsPromise;
71+
72+
const navigationEvent = events.find(event => event.type === 'transaction');
73+
const errorEvent = events.find(event => !event.type);
74+
75+
expect(navigationEvent?.contexts?.trace?.op).toBe('navigation');
76+
77+
const navigationTraceId = navigationEvent?.contexts?.trace?.trace_id;
78+
expect(navigationTraceId).toMatch(/^[0-9a-f]{32}$/);
79+
80+
const errorTraceId = errorEvent?.contexts?.trace?.trace_id;
81+
expect(errorTraceId).toBe(navigationTraceId);
82+
});

dev-packages/browser-integration-tests/suites/tracing/trace-lifetime/pageload/test.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { expect } from '@playwright/test';
22
import type { Event } from '@sentry/types';
33
import { sentryTest } from '../../../../utils/fixtures';
4-
import { getFirstSentryEnvelopeRequest, shouldSkipTracingTest } from '../../../../utils/helpers';
4+
import {
5+
getFirstSentryEnvelopeRequest,
6+
getMultipleSentryEnvelopeRequests,
7+
shouldSkipTracingTest,
8+
} from '../../../../utils/helpers';
59

610
sentryTest(
711
'should create a new trace for a navigation after the initial pageload',
@@ -48,3 +52,27 @@ sentryTest('error after pageload has pageload traceId', async ({ getLocalTestPat
4852
const errorTraceId = errorEvent.contexts?.trace?.trace_id;
4953
expect(errorTraceId).toBe(pageloadTraceId);
5054
});
55+
56+
sentryTest('error during pageload has pageload traceId', async ({ getLocalTestPath, page }) => {
57+
if (shouldSkipTracingTest()) {
58+
sentryTest.skip();
59+
}
60+
61+
const url = await getLocalTestPath({ testDir: __dirname });
62+
63+
const envelopeRequestsPromise = getMultipleSentryEnvelopeRequests<Event>(page, 2);
64+
await page.goto(url);
65+
await page.locator('#errorBtn').click();
66+
const events = await envelopeRequestsPromise;
67+
68+
const pageloadEvent = events.find(event => event.type === 'transaction');
69+
const errorEvent = events.find(event => !event.type);
70+
71+
expect(pageloadEvent?.contexts?.trace?.op).toBe('pageload');
72+
73+
const pageloadTraceId = pageloadEvent?.contexts?.trace?.trace_id;
74+
expect(pageloadTraceId).toMatch(/^[0-9a-f]{32}$/);
75+
76+
const errorTraceId = errorEvent?.contexts?.trace?.trace_id;
77+
expect(errorTraceId).toBe(pageloadTraceId);
78+
});

0 commit comments

Comments
 (0)