diff --git a/packages/nextjs/test/integration/test/client/tracingFetch.test.ts b/packages/nextjs/test/integration/test/client/tracingFetch.test.ts index 7c3256c5e6a7..88634c92012e 100644 --- a/packages/nextjs/test/integration/test/client/tracingFetch.test.ts +++ b/packages/nextjs/test/integration/test/client/tracingFetch.test.ts @@ -31,7 +31,12 @@ test('should correctly instrument `fetch` for performance tracing', async ({ pag expect(transaction[0].spans).toEqual( expect.arrayContaining([ expect.objectContaining({ - data: { 'http.method': 'GET', url: 'http://example.com', type: 'fetch' }, + data: { + 'http.method': 'GET', + url: 'http://example.com', + type: 'fetch', + 'http.response_content_length': expect.any(Number), + }, description: 'GET http://example.com', op: 'http.client', parent_span_id: expect.any(String), diff --git a/packages/tracing-internal/src/browser/request.ts b/packages/tracing-internal/src/browser/request.ts index d4d2edd21b85..284d8f339435 100644 --- a/packages/tracing-internal/src/browser/request.ts +++ b/packages/tracing-internal/src/browser/request.ts @@ -176,11 +176,13 @@ export function fetchCallback( // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access span.setHttpStatus(handlerData.response.status); - const contentLength = + const contentLength: string = // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length'); - if (contentLength > 0) { - span.setData('http.response_content_length', contentLength); + + const contentLengthNum = parseInt(contentLength); + if (contentLengthNum > 0) { + span.setData('http.response_content_length', contentLengthNum); } } else if (handlerData.error) { span.setStatus('internal_error'); diff --git a/packages/tracing-internal/test/browser/request.test.ts b/packages/tracing-internal/test/browser/request.test.ts index c677818752cc..ee714e111a8b 100644 --- a/packages/tracing-internal/test/browser/request.test.ts +++ b/packages/tracing-internal/test/browser/request.test.ts @@ -214,9 +214,8 @@ describe('callbacks', () => { expect(newSpan).toBeUndefined(); }); - it('adds content-length to span data', () => { - const spans = {}; - fetchHandlerData['response'] = { headers: { 'content-length': 123 } }; + it('adds content-length to span data on finish', () => { + const spans: Record = {}; // triggered by request being sent fetchCallback(fetchHandlerData, alwaysCreateSpan, alwaysAttachHeaders, spans); @@ -224,8 +223,21 @@ describe('callbacks', () => { const newSpan = transaction.spanRecorder?.spans[1] as Span; expect(newSpan).toBeDefined(); - expect(newSpan).toBeInstanceOf(Span); - expect(newSpan.data).toEqual({ + + const postRequestFetchHandlerData = { + ...fetchHandlerData, + endTimestamp, + response: { status: 404, headers: { get: () => 123 } }, + }; + + // triggered by response coming back + fetchCallback(postRequestFetchHandlerData, alwaysCreateSpan, alwaysAttachHeaders, spans); + + const finishedSpan = transaction.spanRecorder?.spans[1] as Span; + + expect(finishedSpan).toBeDefined(); + expect(finishedSpan).toBeInstanceOf(Span); + expect(finishedSpan.data).toEqual({ 'http.response_content_length': 123, 'http.method': 'GET', type: 'fetch', diff --git a/packages/utils/test/envelope.test.ts b/packages/utils/test/envelope.test.ts index 2996b6dcde06..9649da0e2108 100644 --- a/packages/utils/test/envelope.test.ts +++ b/packages/utils/test/envelope.test.ts @@ -36,7 +36,7 @@ describe('envelope', () => { expect(headers).toEqual({ event_id: 'aa3ff046696b4bc6b609ce6d28fde9e2', sent_at: '123' }); }); - it.only('serializes an envelope with attachments', () => { + it('serializes an envelope with attachments', () => { const items: EventEnvelope[1] = [ [{ type: 'event' }, { event_id: 'aa3ff046696b4bc6b609ce6d28fde9e2' }], [{ type: 'attachment', filename: 'bar.txt', length: 6 }, Uint8Array.from([1, 2, 3, 4, 5, 6])],