【问题标题】:Redirect calls to console.log() to standard output in Jasmine tests在 Jasmine 测试中将对 console.log() 的调用重定向到标准输出
【发布时间】:2012-06-18 11:36:27
【问题描述】:

我正在通过 jasmine-maven-plugin 使用 Jasmine,我希望在 Maven 构建输出中看到 console.log() 消息。有没有办法做到这一点?

如果无法重定向 console.log(),是否有任何其他方法可以从我的测试中记录日志,以便它们显示在 Maven 构建输出中?

我正在 Jenkins 上以无头方式运行这些测试,并且想要一种从测试中获取一些调试输出的方法。

【问题讨论】:

标签: javascript jasmine jasmine-maven-plugin


【解决方案1】:

茉莉花 1.x

你可以使用:

jasmine.log("I've got a big log.");

茉莉花2+

直接使用console.log,按照下面的douglas-treadwell's评论。

【讨论】:

  • 这对我不起作用;运行 mvn jasmine:test(使用插件版本 1.3.1.3,htmlunit 2.13)时,我在终端的任何地方都看不到 jasmine.log 的输出
  • @PavelLishin,它不会打印到您的控制台窗口,但会打印到网络运行器。
  • 这是指 Jasmine 1.x。使用 Jasmine 2.0 只需直接使用 console.log。
【解决方案2】:

如果您在节点环境中运行。你可以使用

process.stdout.write("this will be send to the console");

【讨论】:

    【解决方案3】:

    1) 转到您拥有 pom.xml 的项目目录。在 cmd 中运行以下命令。 mvn jasmine:bdd

    2) 您将获得 localhost URL:localhost:8234(只是一个示例)。

    3) 在浏览器中运行此 URL。现在你所有的测试用例都被执行了。

    4) 执行此页面的检查元素。在浏览器控制台中,您将能够看到所有 console.log() 或 console.error() 跟踪。

    【讨论】:

      【解决方案4】:

      使用 grunt/karma/jasmine (karma-jasmine 0.2.2) 遇到了同样的问题 -

      按照 Dave Sag 的说法,我发现我正在测试的代码中的所有 console.log 消息运行良好,但是我的 describe() {}it() {} 块中没有任何记录。

      确实发现您可以从beforeEach() {} 块登录。至少它对我有用:

      beforeEach(function() {
        this.model = new blahModel();
        console.log('this.model = ', this.model);
      });
      

      注意这只会登录浏览器控制台,并且由于某种原因不会登录命令行。有点奇怪的时候 控制台日志 测试代码块中的语句会在命令行中登录。我还发现了似乎更好的一致日志记录方法here

      更新:我实际上也看到了它的日志记录工作,我相信我有其他错误阻止了这一点。

      【讨论】:

        【解决方案5】:

        如果您迫切需要终端窗口中的任何输出,以便在测试完成且浏览器关闭后查看数据,console.error() 似乎可以解决问题。

        【讨论】:

          【解决方案6】:

          我认为不可能

          我不得不覆盖规范加载器中的 console.log 实现。即(使用jQuery)

          var console = {
              panel: $('body').append('<div>').css({position:'fixed', top:0, right:0,background:'transparent'}),
              log: function(m){
                  this.panel.prepend('<div>'+m+'</div>');
              }       
          
          };
                  console.log('message 1');
                  console.log('message 2');
          

          here你有一个功能示例

          【讨论】:

          • IIUC,这会将 console.log() 消息打印到
            。我想要的是把它放在 Maven 构建的标准输出上。我错过了什么吗?
          • 有可能。直接使用 console.log 即可。这没有回答最初的问题。
          • 请注意,div 默认具有透明背景。
          【解决方案7】:

          试试

          console.info('foo')
          

          来自测试 javascripts。

          【讨论】:

          • 为什么是 .info 而不是 .log?
          • 奇怪的是,对于 Jasmine 2.5,我不得不这样做而不是 console.log。我有详细信息,但 console.log 没有显示(它显示日志行 + 空字符串),而 console.info 实际上显示日志行 + 我正在记录的任何内容。
          • @user1338062 - 因此,您对否决票的反馈是,您应该包含 ezekial victor 提供的信息,如果有的话,您可能没有得到否决票。
          【解决方案8】:

          我通过guardphantom js 使用jasmine 2 并发现测试中的标准console.log 消息可以很好地输出到jasmine 规范运行器的控制台。

          我还发现,我正在测试的 javascript 代码元素中的 console.log 消息确实会写入 stdout,但不会写入测试本身中的 console.log 消息。

          【讨论】:

          • console.log 应该可以工作。如果您没有在输出中看到您的 console.logs,请尝试在调用堆栈的较早位置添加更多内容。很可能您之前遇到了一个错误,导致执行无法到达您的 console.log。
          • console.error() 似乎对我的回答 here 有效。
          猜你喜欢
          相关资源
          最近更新 更多
          热门标签