From 4f0443423a1cb370ededff0f7fbd707df323aa7f Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Fri, 11 Nov 2022 13:43:08 +0100 Subject: [PATCH 1/5] Add tracing options to Http integration --- packages/node/src/integrations/http.ts | 72 ++++++++++++++++++-------- 1 file changed, 50 insertions(+), 22 deletions(-) diff --git a/packages/node/src/integrations/http.ts b/packages/node/src/integrations/http.ts index 4cdd58f7ee25..634b13db1930 100644 --- a/packages/node/src/integrations/http.ts +++ b/packages/node/src/integrations/http.ts @@ -1,5 +1,5 @@ import { getCurrentHub, Hub } from '@sentry/core'; -import { EventProcessor, Integration, Span } from '@sentry/types'; +import { EventProcessor, Integration, Span, TracePropagationTargets } from '@sentry/types'; import { dynamicSamplingContextToSentryBaggageHeader, fill, @@ -11,7 +11,6 @@ import * as http from 'http'; import * as https from 'https'; import { NodeClient } from '../client'; -import { NodeClientOptions } from '../types'; import { cleanSpanDescription, extractUrl, @@ -23,6 +22,39 @@ import { const NODE_VERSION = parseSemver(process.versions.node); +interface TracingOptions { + /** + * List of strings/regex controlling to which outgoing requests + * the SDK will attach tracing headers. + * + * By default the SDK will attach those headers to all outgoing + * requests. If this option is provided, the SDK will match the + * request URL of outgoing requests against the items in this + * array, and only attach tracing headers if a match was found. + */ + tracePropagationTargets?: TracePropagationTargets; + + /** + * Function determining whether or not to create spans to track outgoing requests to the given URL. + * By default, spans will be created for all outgoing requests. + */ + shouldCreateSpanForRequest?: (url: string) => boolean; +} + +interface HttpOptions { + /** + * Whether breadcrumbs should be recorded for requests + * Defaults to true + */ + breadcrumbs?: boolean; + + /** + * Whether tracing spans should be created for requests + * Defaults to false + */ + tracing?: TracingOptions | boolean; +} + /** * The http module integration instruments Node's internal http module. It creates breadcrumbs, transactions for outgoing * http requests and attaches trace data when tracing is enabled via its `tracing` option. @@ -38,22 +70,15 @@ export class Http implements Integration { */ public name: string = Http.id; - /** - * @inheritDoc - */ private readonly _breadcrumbs: boolean; + private readonly _tracing: TracingOptions | undefined; /** * @inheritDoc */ - private readonly _tracing: boolean; - - /** - * @inheritDoc - */ - public constructor(options: { breadcrumbs?: boolean; tracing?: boolean } = {}) { + public constructor(options: HttpOptions = {}) { this._breadcrumbs = typeof options.breadcrumbs === 'undefined' ? true : options.breadcrumbs; - this._tracing = typeof options.tracing === 'undefined' ? false : options.tracing; + this._tracing = !options.tracing ? undefined : options.tracing === true ? {} : options.tracing; } /** @@ -76,7 +101,11 @@ export class Http implements Integration { return; } - const wrappedHandlerMaker = _createWrappedRequestMethodFactory(this._breadcrumbs, this._tracing, clientOptions); + // TODO (v8): `tracePropagationTargets` and `shouldCreateSpanForRequest` will be removed from clientOptions + // and we will no longer have to do this optional merge, we can just pass `this._tracing` directly. + const tracingOptions = this._tracing ? { ...clientOptions, ...this._tracing } : undefined; + + const wrappedHandlerMaker = _createWrappedRequestMethodFactory(this._breadcrumbs, tracingOptions); // eslint-disable-next-line @typescript-eslint/no-var-requires const httpModule = require('http'); @@ -111,15 +140,14 @@ type WrappedRequestMethodFactory = (original: OriginalRequestMethod) => WrappedR */ function _createWrappedRequestMethodFactory( breadcrumbsEnabled: boolean, - tracingEnabled: boolean, - options: NodeClientOptions | undefined, + tracingOptions: TracingOptions | undefined, ): WrappedRequestMethodFactory { // We're caching results so we don't have to recompute regexp every time we create a request. const createSpanUrlMap: Record = {}; const headersUrlMap: Record = {}; const shouldCreateSpan = (url: string): boolean => { - if (options?.shouldCreateSpanForRequest === undefined) { + if (tracingOptions?.shouldCreateSpanForRequest === undefined) { return true; } @@ -127,13 +155,13 @@ function _createWrappedRequestMethodFactory( return createSpanUrlMap[url]; } - createSpanUrlMap[url] = options.shouldCreateSpanForRequest(url); + createSpanUrlMap[url] = tracingOptions.shouldCreateSpanForRequest(url); return createSpanUrlMap[url]; }; const shouldAttachTraceData = (url: string): boolean => { - if (options?.tracePropagationTargets === undefined) { + if (tracingOptions?.tracePropagationTargets === undefined) { return true; } @@ -141,7 +169,7 @@ function _createWrappedRequestMethodFactory( return headersUrlMap[url]; } - headersUrlMap[url] = options.tracePropagationTargets.some(tracePropagationTarget => + headersUrlMap[url] = tracingOptions.tracePropagationTargets.some(tracePropagationTarget => isMatchingPattern(url, tracePropagationTarget), ); @@ -167,7 +195,7 @@ function _createWrappedRequestMethodFactory( const scope = getCurrentHub().getScope(); - if (scope && tracingEnabled && shouldCreateSpan(requestUrl)) { + if (scope && tracingOptions && shouldCreateSpan(requestUrl)) { parentSpan = scope.getSpan(); if (parentSpan) { @@ -235,7 +263,7 @@ function _createWrappedRequestMethodFactory( if (breadcrumbsEnabled) { addRequestBreadcrumb('response', requestUrl, req, res); } - if (tracingEnabled && requestSpan) { + if (requestSpan) { if (res.statusCode) { requestSpan.setHttpStatus(res.statusCode); } @@ -250,7 +278,7 @@ function _createWrappedRequestMethodFactory( if (breadcrumbsEnabled) { addRequestBreadcrumb('error', requestUrl, req); } - if (tracingEnabled && requestSpan) { + if (requestSpan) { requestSpan.setHttpStatus(500); requestSpan.description = cleanSpanDescription(requestSpan.description, requestOptions, req); requestSpan.finish(); From 0513657072df9c0e64defca9e9bc2663bc7701f3 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Fri, 11 Nov 2022 14:16:42 +0100 Subject: [PATCH 2/5] Fix nextjs tests --- packages/nextjs/src/index.server.ts | 2 +- packages/nextjs/test/index.server.test.ts | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/nextjs/src/index.server.ts b/packages/nextjs/src/index.server.ts index 0191a5334b2d..c1efd2e300d3 100644 --- a/packages/nextjs/src/index.server.ts +++ b/packages/nextjs/src/index.server.ts @@ -129,7 +129,7 @@ function addServerIntegrations(options: NextjsOptions): void { if (hasTracingEnabled(options)) { const defaultHttpTracingIntegration = new Integrations.Http({ tracing: true }); integrations = addOrUpdateIntegration(defaultHttpTracingIntegration, integrations, { - _tracing: true, + _tracing: {}, }); } diff --git a/packages/nextjs/test/index.server.test.ts b/packages/nextjs/test/index.server.test.ts index d432b61eb16e..232d3b746f1e 100644 --- a/packages/nextjs/test/index.server.test.ts +++ b/packages/nextjs/test/index.server.test.ts @@ -169,7 +169,7 @@ describe('Server init()', () => { const httpIntegration = findIntegrationByName(nodeInitOptions.integrations, 'Http'); expect(httpIntegration).toBeDefined(); - expect(httpIntegration).toEqual(expect.objectContaining({ _tracing: true })); + expect(httpIntegration).toEqual(expect.objectContaining({ _tracing: {} })); }); it('adds `Http` integration with tracing enabled if `tracesSampler` is set', () => { @@ -179,7 +179,7 @@ describe('Server init()', () => { const httpIntegration = findIntegrationByName(nodeInitOptions.integrations, 'Http'); expect(httpIntegration).toBeDefined(); - expect(httpIntegration).toEqual(expect.objectContaining({ _tracing: true })); + expect(httpIntegration).toEqual(expect.objectContaining({ _tracing: {} })); }); it('does not add `Http` integration if tracing not enabled in SDK', () => { @@ -201,7 +201,7 @@ describe('Server init()', () => { const httpIntegration = findIntegrationByName(nodeInitOptions.integrations, 'Http'); expect(httpIntegration).toBeDefined(); - expect(httpIntegration).toEqual(expect.objectContaining({ _tracing: true })); + expect(httpIntegration).toEqual(expect.objectContaining({ _tracing: {} })); }); it('forces `_tracing = true` if `tracesSampler` is set', () => { @@ -214,7 +214,7 @@ describe('Server init()', () => { const httpIntegration = findIntegrationByName(nodeInitOptions.integrations, 'Http'); expect(httpIntegration).toBeDefined(); - expect(httpIntegration).toEqual(expect.objectContaining({ _tracing: true })); + expect(httpIntegration).toEqual(expect.objectContaining({ _tracing: {} })); }); it('does not force `_tracing = true` if tracing not enabled in SDK', () => { @@ -226,7 +226,7 @@ describe('Server init()', () => { const httpIntegration = findIntegrationByName(nodeInitOptions.integrations, 'Http'); expect(httpIntegration).toBeDefined(); - expect(httpIntegration).toEqual(expect.objectContaining({ _tracing: false })); + expect(httpIntegration).toEqual(expect.objectContaining({ _tracing: undefined })); }); }); }); From 4869264cc032f4a31726a0a128e38251ec4aea32 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Sat, 12 Nov 2022 00:50:03 +0100 Subject: [PATCH 3/5] Deprecate properties and the duplicate tests for options passed to constructor --- packages/node/src/types.ts | 31 ++- packages/node/test/integrations/http.test.ts | 227 ++++++++++++++----- 2 files changed, 184 insertions(+), 74 deletions(-) diff --git a/packages/node/src/types.ts b/packages/node/src/types.ts index 59c4c9af7ec7..7568d30f0bf0 100644 --- a/packages/node/src/types.ts +++ b/packages/node/src/types.ts @@ -6,22 +6,31 @@ export interface BaseNodeOptions { /** Sets an optional server name (device name) */ serverName?: string; - // We have this option separately in both, the node options and the browser options, so that we can have different JSDoc - // comments, since this has different behaviour in the Browser and Node SDKs. + // TODO (v8): Remove this in v8 /** - * List of strings/regex controlling to which outgoing requests - * the SDK will attach tracing headers. - * - * By default the SDK will attach those headers to all outgoing - * requests. If this option is provided, the SDK will match the - * request URL of outgoing requests against the items in this - * array, and only attach tracing headers if a match was found. + * @deprecated Moved to constructor options of `BrowserTracing`. + * @example + * ```js + * new BrowserTracing({ + * tracing: { + * tracePropagationTargets: ['api.site.com'], + * } + * }); + * ``` */ tracePropagationTargets?: TracePropagationTargets; + // TODO (v8): Remove this in v8 /** - * Function determining whether or not to create spans to track outgoing requests to the given URL. - * By default, spans will be created for all outgoing requests. + * @deprecated Moved to constructor options of `BrowserTracing`. + * @example + * ```js + * new BrowserTracing({ + * tracing: { + * shouldCreateSpanForRequest: (url: string) => false, + * } + * }) + * ``` */ shouldCreateSpanForRequest?(url: string): boolean; diff --git a/packages/node/test/integrations/http.test.ts b/packages/node/test/integrations/http.test.ts index 6bf8a7117327..6de4af814b97 100644 --- a/packages/node/test/integrations/http.test.ts +++ b/packages/node/test/integrations/http.test.ts @@ -210,7 +210,7 @@ describe('tracing', () => { expect(loggerLogSpy).toBeCalledWith('HTTP Integration is skipped because of instrumenter configuration.'); }); - describe('tracePropagationTargets option', () => { + describe('Tracing options', () => { beforeEach(() => { // hacky way of restoring monkey patched functions // @ts-ignore TS doesn't let us assign to this but we want to @@ -246,97 +246,198 @@ describe('tracing', () => { return transaction; } - it("doesn't create span if shouldCreateSpanForRequest returns false", () => { - const url = 'http://dogs.are.great/api/v1/index/'; - nock(url).get(/.*/).reply(200); + // TODO (v8): These can be removed once we remove these properties from client options + describe('as client options', () => { + it("doesn't create span if shouldCreateSpanForRequest returns false", () => { + const url = 'http://dogs.are.great/api/v1/index/'; + nock(url).get(/.*/).reply(200); + + const httpIntegration = new HttpIntegration({ tracing: true }); + + const hub = createHub({ shouldCreateSpanForRequest: () => false }); + + httpIntegration.setupOnce( + () => undefined, + () => hub, + ); - const httpIntegration = new HttpIntegration({ tracing: true }); + const transaction = createTransactionAndPutOnScope(hub); + const spans = (transaction as unknown as Span).spanRecorder?.spans as Span[]; - const hub = createHub({ shouldCreateSpanForRequest: () => false }); + const request = http.get(url); + + // There should be no http spans + const httpSpans = spans.filter(span => span.op?.startsWith('http')); + expect(httpSpans.length).toBe(0); - httpIntegration.setupOnce( - () => undefined, - () => hub, + // And headers are not attached without span creation + expect(request.getHeader('sentry-trace')).toBeUndefined(); + expect(request.getHeader('baggage')).toBeUndefined(); + }); + + it.each([ + ['http://dogs.are.great/api/v1/index/', [/.*/]], + ['http://dogs.are.great/api/v1/index/', [/\/api/]], + ['http://dogs.are.great/api/v1/index/', [/\/(v1|v2)/]], + ['http://dogs.are.great/api/v1/index/', [/dogs\.are\.great/, /dogs\.are\.not\.great/]], + ['http://dogs.are.great/api/v1/index/', [/http:/]], + ['http://dogs.are.great/api/v1/index/', ['dogs.are.great']], + ['http://dogs.are.great/api/v1/index/', ['/api/v1']], + ['http://dogs.are.great/api/v1/index/', ['http://']], + ['http://dogs.are.great/api/v1/index/', ['']], + ])( + 'attaches trace inforation to header of outgoing requests when url matches tracePropagationTargets (url="%s", tracePropagationTargets=%p)', + (url, tracePropagationTargets) => { + nock(url).get(/.*/).reply(200); + + const httpIntegration = new HttpIntegration({ tracing: true }); + + const hub = createHub({ tracePropagationTargets }); + + httpIntegration.setupOnce( + () => undefined, + () => hub, + ); + + createTransactionAndPutOnScope(hub); + + const request = http.get(url); + + expect(request.getHeader('sentry-trace')).toBeDefined(); + expect(request.getHeader('baggage')).toBeDefined(); + }, ); - const transaction = createTransactionAndPutOnScope(hub); - const spans = (transaction as unknown as Span).spanRecorder?.spans as Span[]; + it.each([ + ['http://dogs.are.great/api/v1/index/', []], + ['http://cats.are.great/api/v1/index/', [/\/v2/]], + ['http://cats.are.great/api/v1/index/', [/\/(v2|v3)/]], + ['http://cats.are.great/api/v1/index/', [/dogs\.are\.great/, /dogs\.are\.not\.great/]], + ['http://cats.are.great/api/v1/index/', [/https:/]], + ['http://cats.are.great/api/v1/index/', ['dogs.are.great']], + ['http://cats.are.great/api/v1/index/', ['/api/v2']], + ['http://cats.are.great/api/v1/index/', ['https://']], + ])( + 'doesn\'t attach trace inforation to header of outgoing requests when url doesn\'t match tracePropagationTargets (url="%s", tracePropagationTargets=%p)', + (url, tracePropagationTargets) => { + nock(url).get(/.*/).reply(200); + + const httpIntegration = new HttpIntegration({ tracing: true }); - const request = http.get(url); + const hub = createHub({ tracePropagationTargets }); - // There should be no http spans - const httpSpans = spans.filter(span => span.op?.startsWith('http')); - expect(httpSpans.length).toBe(0); + httpIntegration.setupOnce( + () => undefined, + () => hub, + ); - // And headers are not attached without span creation - expect(request.getHeader('sentry-trace')).toBeUndefined(); - expect(request.getHeader('baggage')).toBeUndefined(); + createTransactionAndPutOnScope(hub); + + const request = http.get(url); + + expect(request.getHeader('sentry-trace')).not.toBeDefined(); + expect(request.getHeader('baggage')).not.toBeDefined(); + }, + ); }); - it.each([ - ['http://dogs.are.great/api/v1/index/', [/.*/]], - ['http://dogs.are.great/api/v1/index/', [/\/api/]], - ['http://dogs.are.great/api/v1/index/', [/\/(v1|v2)/]], - ['http://dogs.are.great/api/v1/index/', [/dogs\.are\.great/, /dogs\.are\.not\.great/]], - ['http://dogs.are.great/api/v1/index/', [/http:/]], - ['http://dogs.are.great/api/v1/index/', ['dogs.are.great']], - ['http://dogs.are.great/api/v1/index/', ['/api/v1']], - ['http://dogs.are.great/api/v1/index/', ['http://']], - ['http://dogs.are.great/api/v1/index/', ['']], - ])( - 'attaches trace inforation to header of outgoing requests when url matches tracePropagationTargets (url="%s", tracePropagationTargets=%p)', - (url, tracePropagationTargets) => { + describe('as BrowserTracing constructor options', () => { + it("doesn't create span if shouldCreateSpanForRequest returns false", () => { + const url = 'http://dogs.are.great/api/v1/index/'; nock(url).get(/.*/).reply(200); - const httpIntegration = new HttpIntegration({ tracing: true }); + const httpIntegration = new HttpIntegration({ + tracing: { + shouldCreateSpanForRequest: () => false, + }, + }); - const hub = createHub({ tracePropagationTargets }); + const hub = createHub(); httpIntegration.setupOnce( () => undefined, () => hub, ); - createTransactionAndPutOnScope(hub); + const transaction = createTransactionAndPutOnScope(hub); + const spans = (transaction as unknown as Span).spanRecorder?.spans as Span[]; const request = http.get(url); - expect(request.getHeader('sentry-trace')).toBeDefined(); - expect(request.getHeader('baggage')).toBeDefined(); - }, - ); + // There should be no http spans + const httpSpans = spans.filter(span => span.op?.startsWith('http')); + expect(httpSpans.length).toBe(0); - it.each([ - ['http://dogs.are.great/api/v1/index/', []], - ['http://cats.are.great/api/v1/index/', [/\/v2/]], - ['http://cats.are.great/api/v1/index/', [/\/(v2|v3)/]], - ['http://cats.are.great/api/v1/index/', [/dogs\.are\.great/, /dogs\.are\.not\.great/]], - ['http://cats.are.great/api/v1/index/', [/https:/]], - ['http://cats.are.great/api/v1/index/', ['dogs.are.great']], - ['http://cats.are.great/api/v1/index/', ['/api/v2']], - ['http://cats.are.great/api/v1/index/', ['https://']], - ])( - 'doesn\'t attach trace inforation to header of outgoing requests when url doesn\'t match tracePropagationTargets (url="%s", tracePropagationTargets=%p)', - (url, tracePropagationTargets) => { - nock(url).get(/.*/).reply(200); + // And headers are not attached without span creation + expect(request.getHeader('sentry-trace')).toBeUndefined(); + expect(request.getHeader('baggage')).toBeUndefined(); + }); - const httpIntegration = new HttpIntegration({ tracing: true }); + it.each([ + ['http://dogs.are.great/api/v1/index/', [/.*/]], + ['http://dogs.are.great/api/v1/index/', [/\/api/]], + ['http://dogs.are.great/api/v1/index/', [/\/(v1|v2)/]], + ['http://dogs.are.great/api/v1/index/', [/dogs\.are\.great/, /dogs\.are\.not\.great/]], + ['http://dogs.are.great/api/v1/index/', [/http:/]], + ['http://dogs.are.great/api/v1/index/', ['dogs.are.great']], + ['http://dogs.are.great/api/v1/index/', ['/api/v1']], + ['http://dogs.are.great/api/v1/index/', ['http://']], + ['http://dogs.are.great/api/v1/index/', ['']], + ])( + 'attaches trace inforation to header of outgoing requests when url matches tracePropagationTargets (url="%s", tracePropagationTargets=%p)', + (url, tracePropagationTargets) => { + nock(url).get(/.*/).reply(200); + + const httpIntegration = new HttpIntegration({ tracing: { tracePropagationTargets } }); + + const hub = createHub(); + + httpIntegration.setupOnce( + () => undefined, + () => hub, + ); + + createTransactionAndPutOnScope(hub); + + const request = http.get(url); + + expect(request.getHeader('sentry-trace')).toBeDefined(); + expect(request.getHeader('baggage')).toBeDefined(); + }, + ); - const hub = createHub({ tracePropagationTargets }); + it.each([ + ['http://dogs.are.great/api/v1/index/', []], + ['http://cats.are.great/api/v1/index/', [/\/v2/]], + ['http://cats.are.great/api/v1/index/', [/\/(v2|v3)/]], + ['http://cats.are.great/api/v1/index/', [/dogs\.are\.great/, /dogs\.are\.not\.great/]], + ['http://cats.are.great/api/v1/index/', [/https:/]], + ['http://cats.are.great/api/v1/index/', ['dogs.are.great']], + ['http://cats.are.great/api/v1/index/', ['/api/v2']], + ['http://cats.are.great/api/v1/index/', ['https://']], + ])( + 'doesn\'t attach trace inforation to header of outgoing requests when url doesn\'t match tracePropagationTargets (url="%s", tracePropagationTargets=%p)', + (url, tracePropagationTargets) => { + nock(url).get(/.*/).reply(200); - httpIntegration.setupOnce( - () => undefined, - () => hub, - ); + const httpIntegration = new HttpIntegration({ tracing: { tracePropagationTargets } }); - createTransactionAndPutOnScope(hub); + const hub = createHub(); - const request = http.get(url); + httpIntegration.setupOnce( + () => undefined, + () => hub, + ); - expect(request.getHeader('sentry-trace')).not.toBeDefined(); - expect(request.getHeader('baggage')).not.toBeDefined(); - }, - ); + createTransactionAndPutOnScope(hub); + + const request = http.get(url); + + expect(request.getHeader('sentry-trace')).not.toBeDefined(); + expect(request.getHeader('baggage')).not.toBeDefined(); + }, + ); + }); }); }); From d659b74d463297d003a56d0fb65b407411ddc756 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Sat, 12 Nov 2022 10:48:46 +0100 Subject: [PATCH 4/5] Correct deprecation docs examples --- packages/node/src/types.ts | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/packages/node/src/types.ts b/packages/node/src/types.ts index 7568d30f0bf0..4e1e2fcf5a68 100644 --- a/packages/node/src/types.ts +++ b/packages/node/src/types.ts @@ -8,13 +8,17 @@ export interface BaseNodeOptions { // TODO (v8): Remove this in v8 /** - * @deprecated Moved to constructor options of `BrowserTracing`. + * @deprecated Moved to constructor options of the `Http` integration. * @example * ```js - * new BrowserTracing({ - * tracing: { - * tracePropagationTargets: ['api.site.com'], - * } + * Sentry.init({ + * integrations: [ + * new Sentry.Integrations.Http({ + * tracing: { + * tracePropagationTargets: ['api.site.com'], + * } + * }); + * ], * }); * ``` */ @@ -22,14 +26,18 @@ export interface BaseNodeOptions { // TODO (v8): Remove this in v8 /** - * @deprecated Moved to constructor options of `BrowserTracing`. + * @deprecated Moved to constructor options of the `Http` integration. * @example * ```js - * new BrowserTracing({ - * tracing: { - * shouldCreateSpanForRequest: (url: string) => false, - * } - * }) + * Sentry.init({ + * integrations: [ + * new Sentry.Integrations.Http({ + * tracing: { + * shouldCreateSpanForRequest: (url: string) => false, + * } + * }); + * ], + * }); * ``` */ shouldCreateSpanForRequest?(url: string): boolean; From 352f8224c1a5f757154d6abde59224846d897159 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Mon, 14 Nov 2022 10:51:37 +0100 Subject: [PATCH 5/5] Changes from code review Co-authored-by: Lukas Stracke --- packages/node/test/integrations/http.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/test/integrations/http.test.ts b/packages/node/test/integrations/http.test.ts index 6de4af814b97..c717550710cf 100644 --- a/packages/node/test/integrations/http.test.ts +++ b/packages/node/test/integrations/http.test.ts @@ -341,7 +341,7 @@ describe('tracing', () => { ); }); - describe('as BrowserTracing constructor options', () => { + describe('as Http integration constructor options', () => { it("doesn't create span if shouldCreateSpanForRequest returns false", () => { const url = 'http://dogs.are.great/api/v1/index/'; nock(url).get(/.*/).reply(200);