/
erioxis
/
web-nodejs
Обзор
Документация
Войти
/
erioxis
/
web-nodejs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/node_modules/pino/test/diagnostics.test.js
107 строк
3 KB
erioxis
lab11fix
15 дек 2025, 23:21
15 дек 2025, 23:21
70dc7ba
Код
Авторство
О чём код?
'use strict' const test = require('node:test') const os = require('node:os') const diagChan = require('node:diagnostics_channel') const { AsyncLocalStorage } = require('node:async_hooks') const { Writable } = require('node:stream') const tspl = require('@matteo.collina/tspl') const pino = require('../pino') const hostname = os.hostname() const { pid } = process const AS_JSON_START = 'tracing:pino_asJson:start' const AS_JSON_END = 'tracing:pino_asJson:end' // Skip tests if diagnostics_channel.tracingChannel is not available (Node < 18.19) const skip = typeof diagChan.tracingChannel !== 'function' test.beforeEach(ctx => { ctx.pino = { ts: 1757512800000, // 2025-09-10T10:00:00.000-05:00 now: Date.now } Date.now = () => ctx.pino.ts ctx.pino.dest = new Writable({ objectMode: true, write (data, enc, cb) { cb() } }) }) test.afterEach(ctx => { Date.now = ctx.pino.now }) test('asJson emits events', { skip }, async (t) => { const plan = tspl(t, { plan: 8 }) const { dest } = t.pino const logger = pino({}, dest) const expectedArguments = [ {}, 'testing', 30, `,"time":${t.pino.ts}` ] let startEvent diagChan.subscribe(AS_JSON_START, startHandler) diagChan.subscribe(AS_JSON_END, endHandler) logger.info('testing') await plan diagChan.unsubscribe(AS_JSON_START, startHandler) diagChan.unsubscribe(AS_JSON_END, endHandler) function startHandler (event) { startEvent = event plan.equal(Object.prototype.toString.call(event.instance), '[object Pino]') plan.equal(event.instance === logger, true) plan.deepStrictEqual(Array.from(event.arguments ?? []), expectedArguments) } function endHandler (event) { plan.equal(Object.prototype.toString.call(event.instance), '[object Pino]') plan.equal(event.instance === logger, true) plan.deepStrictEqual(Array.from(event.arguments ?? []), expectedArguments) plan.equal( event.result, `{"level":30,"time":${t.pino.ts},"pid":${pid},"hostname":"${hostname}","msg":"testing"}\n` ) plan.equal(event.arguments === startEvent.arguments, true, 'same event object is supplied to both events') } }) test('asJson context is not lost', { skip }, async (t) => { const plan = tspl(t, { plan: 2 }) const { dest } = t.pino const logger = pino({}, dest) const asyncLocalStorage = new AsyncLocalStorage() const localStore = { foo: 'bar' } diagChan.subscribe(AS_JSON_START, startHandler) diagChan.subscribe(AS_JSON_END, endHandler) asyncLocalStorage.run(localStore, () => { logger.info('testing') }) await plan diagChan.unsubscribe(AS_JSON_START, startHandler) diagChan.unsubscribe(AS_JSON_END, endHandler) function startHandler () { const store = asyncLocalStorage.getStore() plan.equal(store === localStore, true) } function endHandler () { const store = asyncLocalStorage.getStore() plan.equal(store === localStore, true) } })