Skip to content

Commit dae8d5b

Browse files
committed
add integration test for pageload span
1 parent 6bd700e commit dae8d5b

File tree

2 files changed

+52
-0
lines changed
  • dev-packages
    • browser-integration-tests/utils
    • node-integration-tests/suites/tracing/meta-tags-twp-errors

2 files changed

+52
-0
lines changed

dev-packages/browser-integration-tests/utils/helpers.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import type {
99
EventEnvelope,
1010
EventEnvelopeHeaders,
1111
SessionContext,
12+
SpanV2Envelope,
1213
TransactionEvent,
1314
} from '@sentry/core';
1415
import { parseEnvelope } from '@sentry/core';
@@ -258,6 +259,44 @@ export function waitForTransactionRequest(
258259
});
259260
}
260261

262+
/**
263+
* Wait for a span v2 envelope
264+
*/
265+
export async function waitForSpanV2Envelope(
266+
page: Page,
267+
callback?: (spanEnvelope: SpanV2Envelope) => boolean,
268+
): Promise<SpanV2Envelope> {
269+
const req = await page.waitForRequest(req => {
270+
const postData = req.postData();
271+
if (!postData) {
272+
return false;
273+
}
274+
275+
try {
276+
const spanEnvelope = properFullEnvelopeParser<SpanV2Envelope>(req);
277+
278+
const envelopeItemHeader = spanEnvelope[1][0][0];
279+
280+
if (
281+
envelopeItemHeader?.type !== 'span' ||
282+
envelopeItemHeader?.content_type !== 'application/vnd.sentry.items.span.v2+json'
283+
) {
284+
return false;
285+
}
286+
287+
if (callback) {
288+
return callback(spanEnvelope);
289+
}
290+
291+
return true;
292+
} catch {
293+
return false;
294+
}
295+
});
296+
297+
return properFullEnvelopeParser<SpanV2Envelope>(req);
298+
}
299+
261300
export function waitForClientReportRequest(page: Page, callback?: (report: ClientReport) => boolean): Promise<Request> {
262301
return page.waitForRequest(req => {
263302
const postData = req.postData();

dev-packages/node-integration-tests/suites/tracing/meta-tags-twp-errors/test.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { afterAll, describe, expect, test } from 'vitest';
22
import { cleanupChildProcesses, createRunner } from '../../../utils/runner';
3+
import { run } from 'node:test';
34

45
describe('errors in TwP mode have same trace in trace context and getTraceData()', () => {
56
afterAll(() => {
@@ -8,11 +9,16 @@ describe('errors in TwP mode have same trace in trace context and getTraceData()
89

910
// In a request handler, the spanId is consistent inside of the request
1011
test('in incoming request', async () => {
12+
let firstTraceId: string | undefined;
13+
1114
const runner = createRunner(__dirname, 'server.js')
1215
.expect({
1316
event: event => {
1417
const { contexts } = event;
1518
const { trace_id, span_id } = contexts?.trace || {};
19+
if (!firstTraceId) {
20+
firstTraceId = trace_id;
21+
}
1622
expect(trace_id).toMatch(/^[a-f\d]{32}$/);
1723
expect(span_id).toMatch(/^[a-f\d]{16}$/);
1824

@@ -28,8 +34,15 @@ describe('errors in TwP mode have same trace in trace context and getTraceData()
2834
expect(traceData.metaTags).not.toContain('sentry-sampled=');
2935
},
3036
})
37+
.expect({
38+
event: event => {
39+
expect(event.contexts?.trace?.trace_id).toBeDefined();
40+
expect(event.contexts?.trace?.trace_id).toBe(firstTraceId);
41+
},
42+
})
3143
.start();
3244
runner.makeRequest('get', '/test');
45+
runner.makeRequest('get', '/test');
3346
await runner.completed();
3447
});
3548

0 commit comments

Comments
 (0)