[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
test testing-tools vite
12

Configure Feed

Select the types of activity you want to include in your feed.

docs: add `examples/opentelemetry` (#9201)

authored by

Hiroshi Ogawa and committed by
GitHub
(Dec 8, 2025, 11:28 AM +0100) 167d3a98 01a9a58d

+172
+15
pnpm-lock.yaml
··· 370 370 specifier: workspace:* 371 371 version: link:../../packages/vitest 372 372 373 + examples/opentelemetry: 374 + devDependencies: 375 + '@opentelemetry/sdk-node': 376 + specifier: ^0.208.0 377 + version: 0.208.0(@opentelemetry/api@1.9.0) 378 + '@vitest/browser-playwright': 379 + specifier: workspace:* 380 + version: link:../../packages/browser-playwright 381 + vite: 382 + specifier: ^7.1.5 383 + version: 7.1.5(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) 384 + vitest: 385 + specifier: workspace:* 386 + version: link:../../packages/vitest 387 + 373 388 examples/profiling: 374 389 devDependencies: 375 390 vite:
+6
docs/guide/open-telemetry.md
··· 1 1 # Open Telemetry Support <Experimental /> {#open-telemetry-support} 2 2 3 + ::: tip Example Project 4 + 5 + [GitHub](https://github.com/vitest-dev/vitest/tree/main/examples/opentelemetry) 6 + 7 + ::: 8 + 3 9 [OpenTelemetry](https://opentelemetry.io/) traces can be a useful tool to debug the performance and behavior of your application inside tests. 4 10 5 11 If enabled, Vitest integration generates spans that are scoped to your test's worker.
+20
examples/opentelemetry/README.md
··· 1 + # Vitest Opentelemtry Example 2 + 3 + - **Documentation**: https://vitest.dev/guide/open-telemetry.html 4 + 5 + ## Usage 6 + 7 + ```sh 8 + # Start Jaeger service to receive otlp traces over http 9 + # and serve Web UI at http://localhost:16686 10 + docker compose up -d 11 + 12 + # Run tests (exports with OTLP HTTP by deafult) 13 + pnpm test --experimental.openTelemetry.enabled 14 + 15 + # Use console exporter for quick debugging 16 + OTEL_TRACES_EXPORTER=console pnpm test --experimental.openTelemetry.enabled 17 + 18 + # Run browser mode 19 + pnpm test --experimental.openTelemetry.enabled --browser.enabled 20 + ```
+27
examples/opentelemetry/docker-compose.yaml
··· 1 + services: 2 + # for testing open-telemetry integration locally 3 + # https://www.jaegertracing.io/docs/2.12/getting-started/ 4 + jaeger: 5 + image: cr.jaegertracing.io/jaegertracing/jaeger:2.12.0 6 + # Assign ports for Jaeger UI and OTLP receiver 7 + ports: 8 + # UI http://localhost:16686 9 + - 16686:16686 10 + # OTLP over HTTP (default for NodeSDK) 11 + - 4318:4318 12 + # Optional: uncomment if needed 13 + # - 4317:4317 # OTLP over gRPC 14 + # - 5778:5778 # Jaeger sampling strategies 15 + # - 9411:9411 # Zipkin compatibility 16 + 17 + # Use volume to persist data across container restarts. 18 + # This can be commented out if persistence is not needed. 19 + # https://www.jaegertracing.io/docs/2.12/storage/badger/ 20 + user: '0:0' 21 + command: --config /etc/jaeger/config.yml 22 + volumes: 23 + - ./jaeger-config.yml:/etc/jaeger/config.yml:ro 24 + - jaeger-data:/tmp/badger 25 + 26 + volumes: 27 + jaeger-data:
+38
examples/opentelemetry/jaeger-config.yml
··· 1 + # https://www.jaegertracing.io/docs/2.12/deployment/configuration/ 2 + extensions: 3 + jaeger_storage: 4 + backends: 5 + main_storage: 6 + badger: 7 + directories: 8 + keys: /tmp/badger/keys 9 + values: /tmp/badger/data 10 + ephemeral: false 11 + consistency: true 12 + maintenance_interval: 5m 13 + jaeger_query: 14 + storage: 15 + traces: main_storage 16 + 17 + receivers: 18 + otlp: 19 + protocols: 20 + grpc: 21 + endpoint: 0.0.0.0:4317 22 + http: 23 + endpoint: 0.0.0.0:4318 24 + 25 + processors: 26 + batch: 27 + 28 + exporters: 29 + jaeger_storage_exporter: 30 + trace_storage: main_storage 31 + 32 + service: 33 + extensions: [jaeger_storage, jaeger_query] 34 + pipelines: 35 + traces: 36 + receivers: [otlp] 37 + processors: [batch] 38 + exporters: [jaeger_storage_exporter]
+16
examples/opentelemetry/otel.js
··· 1 + // @ts-check 2 + import { NodeSDK } from '@opentelemetry/sdk-node' 3 + 4 + const sdk = new NodeSDK({ 5 + serviceName: 'vitest', 6 + 7 + // NodeSDK uses "@opentelemetry/exporter-trace-otlp-proto" by default. 8 + // you can override it via `traceExporter` options. 9 + // traceExporter: ..., 10 + 11 + // you can configure additional instrumentations such as `@opentelemetry/auto-instrumentations-node` 12 + // via `instrumentations` options. 13 + // instrumentations: ... 14 + }) 15 + sdk.start() 16 + export default sdk
+16
examples/opentelemetry/package.json
··· 1 + { 2 + "name": "@vitest/example-opentelemetry", 3 + "type": "module", 4 + "private": true, 5 + "license": "MIT", 6 + "scripts": { 7 + "compose": "docker compose", 8 + "test": "vitest" 9 + }, 10 + "devDependencies": { 11 + "@opentelemetry/sdk-node": "^0.208.0", 12 + "@vitest/browser-playwright": "latest", 13 + "vite": "latest", 14 + "vitest": "latest" 15 + } 16 + }
+20
examples/opentelemetry/vite.config.ts
··· 1 + import { playwright } from '@vitest/browser-playwright' 2 + import { defineConfig } from 'vitest/config' 3 + 4 + export default defineConfig({ 5 + test: { 6 + experimental: { 7 + openTelemetry: { 8 + // enable via CLI flag --experimental.openTelemetry.enabled=true 9 + enabled: false, 10 + sdkPath: './otel.js', 11 + }, 12 + }, 13 + browser: { 14 + // enable via CLI flag --browser.enabled=true 15 + enabled: false, 16 + provider: playwright(), 17 + instances: [{ browser: 'chromium' }], 18 + }, 19 + }, 20 + })
+11
examples/opentelemetry/src/basic.test.ts
··· 1 + import { expect, test } from 'vitest' 2 + import { sleep } from './basic' 3 + 4 + test('one plus one', async () => { 5 + await sleep(100) 6 + expect(1 + 1).toBe(2) 7 + }) 8 + 9 + test('one plus two', async () => { 10 + expect(1 + 2).toBe(3) 11 + })
+3
examples/opentelemetry/src/basic.ts
··· 1 + export function sleep(ms: number): Promise<void> { 2 + return new Promise(resolve => setTimeout(resolve, ms)) 3 + }