tests.ts•1.59 kB
import { context, trace } from '@opentelemetry/api'
import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'
import { resourceFromAttributes } from '@opentelemetry/resources'
import { BasicTracerProvider, InMemorySpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'
import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions'
import testMatrix from './_matrix'
// @ts-ignore
import type { PrismaClient } from './generated/prisma/client'
declare let prisma: PrismaClient
let inMemorySpanExporter: InMemorySpanExporter
beforeAll(() => {
  const contextManager = new AsyncLocalStorageContextManager().enable()
  context.setGlobalContextManager(contextManager)
  inMemorySpanExporter = new InMemorySpanExporter()
  const basicTracerProvider = new BasicTracerProvider({
    resource: resourceFromAttributes({
      [ATTR_SERVICE_NAME]: 'test-name',
      [ATTR_SERVICE_VERSION]: '1.0.0',
    }),
    spanProcessors: [new SimpleSpanProcessor(inMemorySpanExporter)],
  })
  trace.setGlobalTracerProvider(basicTracerProvider)
  /* new PrismaInstrumentation is not enabled so spans should not be generated */
  // registerInstrumentations({
  //   instrumentations: [new PrismaInstrumentation()],
  // })
})
afterAll(() => {
  context.disable()
})
testMatrix.setupTestSuite(() => {
  test('should perform a query and assert that no spans were generated', async () => {
    await prisma.user.findMany()
    const spans = inMemorySpanExporter.getFinishedSpans()
    expect(spans).toHaveLength(0)
  })
})