Sk6*_*606 19 unit-testing node.js winston
在执行节点模块的单元测试时,是否可以选择性地禁用Winston日志记录?
理想情况下,我希望在应用程序运行时进行信息和调试目的的记录,但是在我运行测试时不要使表示单元测试结果混乱.
我对winston的使用是我模块的内部,如下所示:
// MyModule.js
var logger = require('winston');
module.exports = function() {
// does some stuff
// and logs some stuff like so:
logger.log('an informational message');
}
// MyModuleTest.js
describe('MyModule', fucntion() {
it('should do some stuff', function() {
var myModuleUnderTest = require('MyModule');
// some tests
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*yer 19
温斯顿运输有一个silent
你可以设置的属性,这可能比删除整个运输更好.
我为传输添加一个名称,使其更容易:
var logger = new winston.Logger();
logger.add(winston.transports.Console, {
name: 'console.info',
colorize: true,
showLevel: true,
formatter: consoleFormatter,
})
Run Code Online (Sandbox Code Playgroud)
然后在测试或设置中,我可以选择性地打开和关闭登录:
logger.transports['console.info'].silent = true // turns off
logger.transports['console.info'].silent = false // logging back on
Run Code Online (Sandbox Code Playgroud)
ya_*_*mon 12
我们在测试中使用了以下silent
属性:
import logger from './my-defined-winston-logger'
//...
beforeAll(() => {
logger.silent = true;
})
afterAll(() => {
logger.silent = false;
})
Run Code Online (Sandbox Code Playgroud)
如果你正在使用Jest,你可以像这样禁用它:
设置在jest运行测试之前运行的设置文件.在package.json
:
{
"jest": {
"setupFiles": ["<rootDir>/jest-set-up/index.js"]
}
}
Run Code Online (Sandbox Code Playgroud)在jest-set-up/index.js
:
import winston from 'winston'
winston.remove(winston.transports.Console)
Run Code Online (Sandbox Code Playgroud)小智 9
对不起,我知道这是一个老问题.
我做的有点难看,但允许我继续--silent
正常使用Jest的选项.我只是将温斯顿设置silent
为process.argv.indexOf("--silent") >= 0
.例如:
const logger = new winston.Logger({
…,
transports: [
new winston.transports.Console({
…,
silent: process.argv.indexOf("--silent") >= 0,
}),
],
});
Run Code Online (Sandbox Code Playgroud)
这是我的设置:
const { createLogger, format, transports, config } = require("winston");
let level, silent;
switch (process.env.NODE_ENV) {
case "production":
level = "warning";
silent = false;
break;
case "test":
level = "emerg";
silent = true;
break;
default:
level = "debug";
silent = false;
break;
}
const options = {
console: {
level,
silent,
handleExceptions: true,
format: format.combine(
format.colorize(),
format.splat(),
format.printf(
info => `${new Date().toISOString()} ${info.level}: ${info.message}`,
),
),
},
};
const logger = createLogger({
levels: config.syslog.levels,
transports: [new transports.Console(options.console)],
exitOnError: false,
});
module.exports = logger;
Run Code Online (Sandbox Code Playgroud)
创建一个记录器:
const logger = createLogger({
level: "info",
format: format.json(),
transports: []
});
Run Code Online (Sandbox Code Playgroud)
使所有日志保持静音:
logger.transports.forEach((t) => (t.silent = true));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12741 次 |
最近记录: |