gpt4 book ai didi

node.js - 运行单元测试时如何抑制来自 node.js 应用程序的应用程序日志消息?

转载 作者:IT老高 更新时间:2023-10-28 21:53:00 29 4
gpt4 key购买 nike

在使用 mocha 和 supertest 对我的 node.js 应用程序(基本上是一个 REST 后端)进行单元测试时,我只需要屏幕上的特定于测试的消息,但标准输出中也充满了应用程序日志消息。

我开始单元测试:

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 的报告器输出?

解决方案:

按照 dankohn 的方法,我得到了这样的结果,这解决了我的问题(使用 winston 进行日志记录):

(在 Node 的“主”服务器文件 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' })
]
});
}

...并设置环境变量,每个单元测试文件都以:

process.env.NODE_ENV = 'test';

最佳答案

在您的 app.js 中:

if (process.env.NODE_ENV !== 'test') {
app.use(express.logger());
}

在每个 mocha 文件的顶部:

process.env.NODE_ENV = 'test';

更新:

我们在导入代码中使用这个函数:

function logExceptOnTest(string) {
if (process.env.NODE_ENV !== 'test') {
console.log(string);
}
}

然后,将所有 console.log('it working') 替换为 logExceptOnTest('it working')。基本技巧是使用环境变量作为您想要的日志级别的全局标志。

关于node.js - 运行单元测试时如何抑制来自 node.js 应用程序的应用程序日志消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22709882/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com