运行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,你可以像这样禁用它:
-
在运行testing之前设置要运行的文件。 在
package.json
:{ "jest": { "setupFiles": ["<rootDir>/jest-set-up/index.js"] } }
-
在
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, }), ], });