在使用mocha和supertest对我的node.js应用程序(基本上是一个REST后端)进行单元测试时,我只需要屏幕上的测试特定消息,但stdout也充斥着应用程序日志消息。
我开始单元测试:
mocha -R spec .
...并得到这个输出(这是它 * 不应该 * 的):
[App] Listening on port 3000 ...
[App] Starting app, hooray!
Project API
GET /projects
[App] entering "projects" module ...
√ should return an array of projects (317ms)
我用[App]标记了应用程序日志消息。我真正想要的是单元测试的输出:
Project API
GET /projects
√ should return an array of projects (317ms)
我怎样才能抑制应用程序的console.log/warn/error输出与Mocha的reporter输出之间的穿插?
解决方案:
遵循dankohn的方法,我最终像这样解决了我的问题(使用winston进行日志记录):
(in node的“main”服务器文件server.js:)
if (process.env.NODE_ENV !== 'test') {
logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)(),
new (winston.transports.File)({ filename: 'foo.log' })
]
});
} else {
// while testing, log only to file, leaving stdout free for unit test status messages
logger = new (winston.Logger)({
transports: [
new (winston.transports.File)({ filename: 'foo.log' })
]
});
}
...并设置env变量,每个单元测试文件都以以下内容开始:
process.env.NODE_ENV = 'test';
6条答案
按热度按时间fxnxkyjh1#
在app.js中:
在每个mocha文件的顶部:
更新:
我们在导入代码中使用这个函数:
然后,将所有的
console.log('it worked')
替换为logExceptOnTest('it worked')
。最基本的技巧是使用环境变量作为全局标志,以指示您想要的日志记录级别。wribegjk2#
这里有一个非常简单的解决方案,它使用SinonJS的test stubs在运行测试之前抑制所有
console.log/info/warn/error
语句。irtuqstp3#
已经回答了,但我想我会补充说,你可以做这个用户winston.add()
dm7nw8vv4#
您可以使用
mocha-suppress-logs
隐藏成功测试生成的日志,但仍然保留失败测试生成的日志,以简化调试。安装:
然后像这样使用它:
您也可以在全局范围内对整个测试套件执行此操作。
以下是该模块的链接:
https://www.npmjs.com/package/mocha-suppress-logs
kcugc4gi5#
仔细看看
the-log
。要隐藏日志,您只需要在某些测试脚本中激活一次静默模式:关于
the-log
:https://github.com/ivanoff/the-logxqnpmsa86#
很晚才去派对,但直接进入测试文件,你可以放心地写:
你的应用程序不会显示任何日志,而摩卡则会。