You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							137 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							137 lines
						
					
					
						
							2.9 KiB
						
					
					
				'use strict'
 | 
						|
 | 
						|
const os = require('os')
 | 
						|
const { test } = require('tap')
 | 
						|
const { sink, once } = require('./helper')
 | 
						|
const pino = require('../')
 | 
						|
 | 
						|
const { pid } = process
 | 
						|
const hostname = os.hostname()
 | 
						|
const level = 50
 | 
						|
const name = 'error'
 | 
						|
 | 
						|
test('mixin object is included', async ({ ok, same }) => {
 | 
						|
  let n = 0
 | 
						|
  const stream = sink()
 | 
						|
  const instance = pino({
 | 
						|
    mixin () {
 | 
						|
      return { hello: ++n }
 | 
						|
    }
 | 
						|
  }, stream)
 | 
						|
  instance.level = name
 | 
						|
  instance[name]('test')
 | 
						|
  const result = await once(stream, 'data')
 | 
						|
  ok(new Date(result.time) <= new Date(), 'time is greater than Date.now()')
 | 
						|
  delete result.time
 | 
						|
  same(result, {
 | 
						|
    pid,
 | 
						|
    hostname,
 | 
						|
    level,
 | 
						|
    msg: 'test',
 | 
						|
    hello: 1
 | 
						|
  })
 | 
						|
})
 | 
						|
 | 
						|
test('mixin object is new every time', async ({ plan, ok, same }) => {
 | 
						|
  plan(6)
 | 
						|
 | 
						|
  let n = 0
 | 
						|
  const stream = sink()
 | 
						|
  const instance = pino({
 | 
						|
    mixin () {
 | 
						|
      return { hello: n }
 | 
						|
    }
 | 
						|
  }, stream)
 | 
						|
  instance.level = name
 | 
						|
 | 
						|
  while (++n < 4) {
 | 
						|
    const msg = `test #${n}`
 | 
						|
    stream.pause()
 | 
						|
    instance[name](msg)
 | 
						|
    stream.resume()
 | 
						|
    const result = await once(stream, 'data')
 | 
						|
    ok(new Date(result.time) <= new Date(), 'time is greater than Date.now()')
 | 
						|
    delete result.time
 | 
						|
    same(result, {
 | 
						|
      pid,
 | 
						|
      hostname,
 | 
						|
      level,
 | 
						|
      msg,
 | 
						|
      hello: n
 | 
						|
    })
 | 
						|
  }
 | 
						|
})
 | 
						|
 | 
						|
test('mixin object is not called if below log level', async ({ ok }) => {
 | 
						|
  const stream = sink()
 | 
						|
  const instance = pino({
 | 
						|
    mixin () {
 | 
						|
      ok(false, 'should not call mixin function')
 | 
						|
    }
 | 
						|
  }, stream)
 | 
						|
  instance.level = 'error'
 | 
						|
  instance.info('test')
 | 
						|
})
 | 
						|
 | 
						|
test('mixin object + logged object', async ({ ok, same }) => {
 | 
						|
  const stream = sink()
 | 
						|
  const instance = pino({
 | 
						|
    mixin () {
 | 
						|
      return { foo: 1, bar: 2 }
 | 
						|
    }
 | 
						|
  }, stream)
 | 
						|
  instance.level = name
 | 
						|
  instance[name]({ bar: 3, baz: 4 })
 | 
						|
  const result = await once(stream, 'data')
 | 
						|
  ok(new Date(result.time) <= new Date(), 'time is greater than Date.now()')
 | 
						|
  delete result.time
 | 
						|
  same(result, {
 | 
						|
    pid,
 | 
						|
    hostname,
 | 
						|
    level,
 | 
						|
    foo: 1,
 | 
						|
    bar: 3,
 | 
						|
    baz: 4
 | 
						|
  })
 | 
						|
})
 | 
						|
 | 
						|
test('mixin not a function', async ({ throws }) => {
 | 
						|
  const stream = sink()
 | 
						|
  throws(function () {
 | 
						|
    pino({ mixin: 'not a function' }, stream)
 | 
						|
  })
 | 
						|
})
 | 
						|
 | 
						|
test('mixin can use context', async ({ ok }) => {
 | 
						|
  const stream = sink()
 | 
						|
  const instance = pino({
 | 
						|
    mixin (context) {
 | 
						|
      ok(context !== null && context !== undefined, 'context should be defined')
 | 
						|
      return Object.assign({
 | 
						|
        error: context.message,
 | 
						|
        stack: context.stack
 | 
						|
      })
 | 
						|
    }
 | 
						|
  }, stream)
 | 
						|
  instance.level = name
 | 
						|
  instance[name]({
 | 
						|
    message: '123',
 | 
						|
    stack: 'stack'
 | 
						|
  }, 'test')
 | 
						|
})
 | 
						|
 | 
						|
test('mixin works without context', async ({ ok }) => {
 | 
						|
  const stream = sink()
 | 
						|
  const instance = pino({
 | 
						|
    mixin (context) {
 | 
						|
      ok(context !== null && context !== undefined, 'context is still defined w/o passing mergeObject')
 | 
						|
 | 
						|
      return {
 | 
						|
        something: true
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }, stream)
 | 
						|
  instance.level = name
 | 
						|
  instance[name]('test')
 | 
						|
})
 |