在 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】:我通过guard
和phantom 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 中访问 Meteor 模板辅助函数以进行集成测试
将代码放在 Jasmine 测试 + Meteor 的正确目录中
在Visual Studio 2013中使用Jasmine + Karma进行AngularJS测试