From 2d501872c606d3b54d6b1bc89b3401a8a0b87d3b Mon Sep 17 00:00:00 2001 From: Tine Jozelj Date: Tue, 22 Mar 2022 15:19:22 +0100 Subject: [PATCH] test(tracing): test that spans are named correctly --- src/tracing/decorators/span.spec.ts | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/tracing/decorators/span.spec.ts diff --git a/src/tracing/decorators/span.spec.ts b/src/tracing/decorators/span.spec.ts new file mode 100644 index 0000000..d160fd2 --- /dev/null +++ b/src/tracing/decorators/span.spec.ts @@ -0,0 +1,48 @@ +import { context, trace } from '@opentelemetry/api'; +import { Span } from './span'; +import { NodeSDK, tracing } from '@opentelemetry/sdk-node'; + +class TestSpan { + @Span() + singleSpan() { + return trace.getSpan(context.active()); + } + + @Span() + doubleSpan() { + return this.singleSpan(); + } +} + +describe('Span', () => { + let instance: TestSpan; + let otelSdk: NodeSDK; + + beforeEach(async () => { + instance = new TestSpan(); + + otelSdk = new NodeSDK({ + traceExporter: new tracing.ConsoleSpanExporter(), + // Noop Span Processor disables any spans from being outputted + // by ConsoleSpanExporter. + // Remove it if you want to debug spans exported. + spanProcessor: new tracing.NoopSpanProcessor(), + }); + + await otelSdk.start(); + }); + + afterEach(async () => { + await otelSdk.shutdown(); + }); + + it('should set correct span', async () => { + const response = instance.singleSpan(); + expect((response as any).name).toEqual('TestSpan.singleSpan'); + }); + + it('should set correct span even when calling other method with Span decorator', async () => { + const response = instance.doubleSpan(); + expect((response as any).name).toEqual('TestSpan.singleSpan'); + }); +});