当前位置: 首页 > 面试题库 >

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

莫乐
2023-03-14
问题内容

在使用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)

我如何抑制应用程序插入Mocha的报告程序输出的console.log / warn / error输出?

解:

遵循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';

更新:

我们在导入html" target="_blank">代码中使用此功能:

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

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



 类似资料:
  • 当我尝试运行此代码时,spring-boot应用程序会运行,但junit测试用例永远不会运行。但是如果我删除“@SpringBootTest(webEnvironment=webEnvironment.RANDOM_PORT)”,那么Junit测试会运行,但我的spring-boot应用程序不会运行。在我早期的项目中,这从来不是一个问题。

  • 本章讨论使用 JUnit,Mockito,MRUnit 和 HBaseTestingUtility 对 HBase 应用程序进行单元测试。大部分信息来自关于测试 HBase 应用程序的社区博客文章。有关 HBase 本身的单元测试的信息,请参阅 hbase.tests 。 175. JUnit HBase 使用 JUnit 进行单元测试 此示例将单元测试添加到以下示例类: public class

  • 2020-02-27 16:36:12.159 313 59-31359/com.gic.spade.android e/AndroidRuntime:致命异常:main process:com.gic.spade.android,PID:31359 java.lang.runtimeException:无法创建应用程序com.gic.spade.android.application.colle

  • 使用 GWT 更轻松地测试异步应用程序 您可能从编写 Ajax 应用程序中获得了极大乐趣,但是对它们执行单元测试却着实让人头痛。 在本文中,Andrew Glover 着手解决 Ajax 的弱点(其中之一),即应对异步 Web 应用程序执行单元测试的固有挑战。 幸运的是,他发现在 Google Web Toolkit 的帮助下,解决这个特殊的代码质量问题要比预想的容易。 Ajax 在近期无疑是 W

  • 问题内容: 如何调试Node.js服务器应用程序? 现在,我主要使用带有以下打印语句的 警报调试 : 必须有更好的调试方法。我知道GoogleChrome浏览器有一个命令行调试器。该调试器也可用于Node.js吗? 问题答案: 节点检查器可以节省一天!从支持WebSocket的任何浏览器中使用它。断点,事件探查器,实时编码等,这真的很棒。 通过以下方式安装: 然后运行:

  • 我尝试在intellij中的play framework java starter示例上运行单元测试,但似乎不起作用。 我下载了该项目,并通过SBT导入将其导入到intellij中。 当我尝试从intellij运行测试时,我得到了“未找到类:”UnitTest“空测试套件” 编辑(在重新定位到@HCE) 我将intellij升级到最新版本:2018.3.2(找不到2018.3.5),但我仍然遇到类