【问题标题】:Testing javascript with Mocha - how can I use console.log to debug a test?使用 Mocha 测试 javascript - 如何使用 console.log 调试测试?
【发布时间】:2012-05-26 20:06:28
【问题描述】:

我正在使用 javascript 测试运行器“Mocha”。

我有一个测试失败,所以我想使用console.log 对其进行调试。

但是当测试运行时,没有输出(只有来自 Mocha 的测试结果)。 好像 Mocha 已经捕获并压制了我的console.log 输出!

如何让 Mocha 显示我的输出? (对于失败的测试)?

编辑:

非常抱歉! — console.log 在测试期间确实有效!我一定期待它会抑制输出,而且我没有正确检查自己的代码。感谢您的回复。 所以...话虽这么说...也许抑制通过测试的输出实际上会很好?嗯……

在相关说明中:我想使用console.log,因为我在尝试让 Eclipse 调试器连接到 node.js 时遇到了很多麻烦。

只有我觉得这很棘手吗?你们如何调试node.js?使用调试器,还是使用console.log 语句?

【问题讨论】:

  • 好买卖! :) 现在我仍然通过 moca 测试非常“调试”节点。我确实看到在不久的将来我可能想在这里评估一些选项:stackoverflow.com/questions/1911015/…
  • 我建议您不要将 Eclipse 用于 Node.js,它确实不是使用 IMO 的最佳环境。 JetBrains 的 WebStorm 是一个很棒的 Node.js IDE,尽管它要花钱。如果您正在寻找免费的,我真的很喜欢新的 Visual Studio Code,它对 Node 调试和其他使 Node 开发变得更好的东西具有很好的内置支持。
  • @dsw88 - 我对 WebStorm 的体验是,一旦我们的文件结构开始变大变深,它就会变慢。让我想起了过去使用 Java 应用程序的日子。
  • 除了@dsw88 写的:使用 VS 代码:插入“调试器”;在代码中的某处声明。使用 --inspect-brk 选项开始测试并使用 VS Code 调试操作“NodeJs attach”。调试器从 mocha 脚本的第一行开始,您必须按 Resume 一次。下次你的“调试器”;声明已达成,您可以开始了。
  • RE 抑制日志以通过测试:stackoverflow.com/questions/53100760/…

标签: javascript node.js mocha.js


【解决方案1】:

您正在使用哪些 Mocha 选项?

可能与使用了记者 (-R) 或 ui (-ui) 有关?

console.log(msg);

在我的测试运行期间运行良好,但有时会混入一些愚蠢的问题。大概是由于测试运行的异步性质。

这是我正在使用的选项 (mocha.opts):

--require should
-R spec
--ui bdd

嗯..刚刚在没有任何 mocha.opts 的情况下进行了测试,console.log 仍然有效。

【讨论】:

  • log() 实际上在哪里大量 TO?
  • HHHmmm 有 9 个赞成票,关于它实际记录到的位置?!?有人可以帮忙吗?我正在使用 webstorm,但在调试窗口的进程控制台或调试器控制台中没有看到它。
【解决方案2】:

如果您正在测试异步代码,您需要确保将done() 放在该异步代码的回调中。我在测试对 REST API 的 http 请求时遇到了这个问题。

【讨论】:

    【解决方案3】:

    您可能还将console.log 放在失败且未被捕获的期望之后,因此您的日志行永远不会被执行。

    【讨论】:

    • 是的,这是我的问题,感谢您提出这个建议。我将控制台日志移至失败的 .expect 之前,它们现在显示。
    【解决方案4】:

    使用debug 库。

    import debug from 'debug'
    const log = debug('server');
    

    使用它:

    log('holi')
    

    然后运行:

    DEBUG=server npm test
    

    就是这样!

    【讨论】:

      【解决方案5】:

      我遇到了node.exe 程序的问题,例如使用mocha 进行测试输出。

      就我而言,我通过删除一些默认的“node.exe”别名来解决它。

      我正在使用Git Bash for Windows(2.29.2) 并且一些默认别名是从/etc/profile.d/aliases.sh 设置的,

        # show me alias related to 'node'
        $ alias|grep node
        alias node='winpty node.exe'`
      

      要删除别名,请更新 aliases.sh 或干脆这样做

      unalias node
      

      我不知道为什么winptyconsole.info 缓冲输出有这种副作用,但是直接使用node.exe,我没有更多的标准输出问题。

      【讨论】:

        猜你喜欢
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-10
        • 2020-11-13
        • 1970-01-01
        • 2019-07-12
        相关资源
        最近更新 更多