From c2e7613681e12ce70c52aaac951759155b3ad812 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Mon, 1 Sep 2025 14:38:36 +0200 Subject: [PATCH] fix(browser): ensure name and source are set correctly when updating span name in-place in `beforeStartSpan` --- .../src/tracing/browserTracingIntegration.ts | 3 +- .../tracing/browserTracingIntegration.test.ts | 39 ++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/packages/browser/src/tracing/browserTracingIntegration.ts b/packages/browser/src/tracing/browserTracingIntegration.ts index d2224f141797..cd63678de16f 100644 --- a/packages/browser/src/tracing/browserTracingIntegration.ts +++ b/packages/browser/src/tracing/browserTracingIntegration.ts @@ -356,6 +356,7 @@ export const browserTracingIntegration = ((_options: Partial { setCurrentClient(client); client.init(); - startBrowserTracingPageLoadSpan(client, { name: 'test span' }); + startBrowserTracingPageLoadSpan(client, { + name: 'test span', + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', + }, + }); + + const pageloadSpan = getActiveSpan(); + + expect(spanToJSON(pageloadSpan!).description).toBe('changed'); + expect(spanToJSON(pageloadSpan!).data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]).toBe('custom'); + }); + + it('sets source to "custom" if name is changed in-place in beforeStartSpan', () => { + const client = new BrowserClient( + getDefaultBrowserClientOptions({ + tracesSampleRate: 0, + integrations: [ + browserTracingIntegration({ + instrumentPageLoad: false, + instrumentNavigation: false, + beforeStartSpan: opts => { + opts.name = 'changed'; + return opts; + }, + }), + ], + }), + ); + setCurrentClient(client); + client.init(); + + startBrowserTracingPageLoadSpan(client, { + name: 'test span', + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url', + }, + }); const pageloadSpan = getActiveSpan();