[英]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.