在 Jasmine 测试中将对 console.log() 的调用重定向到标准输出

Posted

技术标签:

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

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

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

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

【问题讨论】:

另见:***.com/questions/14990335/… 【参考方案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 有效。

以上是关于在 Jasmine 测试中将对 console.log() 的调用重定向到标准输出的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jasmine 测试中测试 $scope?

在 Jasmine 中访问 Meteor 模板辅助函数以进行集成测试

将代码放在 Jasmine 测试 + Meteor 的正确目录中

在Visual Studio 2013中使用Jasmine + Karma进行AngularJS测试

在 Azure DevOps 测试结果中显示 Jasmine 屏幕截图

在 Jasmine 单元测试中模拟 AngularJS 模块依赖项