运行unit testing时禁用winston日志logging?

在执行节点模块的unit testing时,能否select禁用Winston日志?

理想情况下,我希望在应用程序运行时进行信息和debugging目的的日志logging,但是在运行我的testing时不要混乱显示unit testing结果。

我对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 } } 

如果你正在使用Jest,你可以像这样禁用它:

  1. 在运行testing之前设置要运行的文件。 在package.json

     { "jest": { "setupFiles": ["<rootDir>/jest-set-up/index.js"] } } 
  2. jest-set-up/index.js

     import winston from 'winston' winston.remove(winston.transports.Console) 

温斯顿运输有一个silent属性,你可以设置,这可能比删除整个运输好一点。

我给传输添加一个名字就像这样简单一点:

 var logger = new winston.Logger(); logger.add(winston.transports.Console, { name: 'console.info', colorize: true, showLevel: true, formatter: consoleFormatter, }) 

然后在testing或设置中,我可以有select地打开和closureslogging:

 logger.transports['console.info'].silent = true // turns off logger.transports['console.info'].silent = false // logging back on 

对不起,我知道这是一个老问题。

我所做的有点难看,但是允许我继续正常使用Jest的 – --silent选项。 我只是将Winston的silent设置为process.argv.indexOf("--silent") >= 0 。 例如:

 const logger = new winston.Logger({ …, transports: [ new winston.transports.Console({ …, silent: process.argv.indexOf("--silent") >= 0, }), ], });