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

编程入门 行业动态 更新时间:2024-10-03 02:19:06

如何在运行单元测试时抑制来自 node.js <a href=https://www.elefans.com/category/jswz/34/1771452.html style=应用程序的应用程序日志消息?"/>

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

在使用 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 进行日志记录):

(在节点的“主”服务器文件中,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';
回答如下:

在你的 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 worked')
替换所有的
logExceptOnTest('it worked')
。基本技巧是使用环境变量作为您想要的日志记录级别的全局标志。

更多推荐

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

本文发布于:2024-05-30 13:25:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770541.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:应用程序   抑制   单元测试   消息   如何在

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!