簡體   English   中英

如何用目的地模擬皮諾

[英]How to mock Pino with destination

歷史。 我正在使用 Pino 來記錄我的 nodejs Express 應用程序。 我的記錄器設置如下

'use strict';

const pino = require('pino');

const logger = pino({
  level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
  prettyPrint: process.env.NODE_ENV === 'production' ? false : true,
  timestamp: true,
  redact: {
    paths: ['hostname', 'pid'], remove: true
  },
  dest
});

module.exports = logger;

jestSetup.js我有

jest.mock('pino', () => () => {
  return {
    info: jest.fn(),
    error: jest.fn(),
    warn: jest.fn(),
    debug: jest.fn()
  };
});

這處理了pino的常見用途,例如log.info, log.error等。

我想添加異步選項,這樣 pino 就不會阻止執行。

新的“logger.js”

'use strict';

const pino = require('pino');

//   NEW CODE BELOW
const dest = pino.destination({
  minLength: 4096, // Buffer before writing
  sync: false
}); // logs to stdout with no args
// NEW CODE ABOVE

const logger = pino({
  level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
  prettyPrint: process.env.NODE_ENV === 'production' ? false : true,
  timestamp: true,
  redact: {
    paths: ['hostname', 'pid'], remove: true
  },
  dest
});

module.exports = logger;

測試現在失敗,因為pino.destination is not a function

如何修改jestSetup.js文件以添加 pino.destination 的模擬pino.destination

解決方案是模擬 pino 模塊,並從jestSetup.js中刪除條目

__mocks\pino.js

const fakePino = {
  info: jest.fn(),
  error: jest.fn(),
  warn: jest.fn(),
  debug: jest.fn()
};

const fakePinoFunc = () => {
  return fakePino;
};
fakePinoFunc.destination = jest.fn();

jest.doMock('pino', () =>  { return fakePinoFunc; });
const pino = require('pino');

module.exports = pino;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM