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

时间:2012-06-15 11:38:59

标签: javascript jasmine jasmine-maven-plugin

我通过jasmine-maven-plugin使用Jasmine,我想在Maven构建输出中看到console.log()消息。有没有办法实现这个目标?

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

我正在以无头的方式在Jenkins上运行这些测试,并希望能够从测试中获得一些调试输出。

8 个答案:

答案 0 :(得分:53)

尝试

console.info('foo')

来自测试javascripts。

答案 1 :(得分:37)

您可以使用:

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

注意:请参阅下面的douglas-treadwell's评论。

  

这是指Jasmine 1.x.使用Jasmine 2.0,只需直接使用console.log。

答案 2 :(得分:11)

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

  

process.stdout.write("这将发送到控制台");

答案 3 :(得分:3)

我认为不可能

我不得不在规范加载器中覆盖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你有一个功能性的例子

答案 4 :(得分:3)

我通过jasmine 2guard使用phantom js并且发现测试中的标准console.log消息输出到jasmine spec runner的控制台就好了。

我还发现,我正在测试的javascript代码元素中的console.log条消息会在测试中自行写入stdout但不会发送console.log条消息。

答案 5 :(得分:3)

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

答案 6 :(得分:2)

使用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);
});

请注意,只会在浏览器控制台中登录,并且由于某种原因不会登录命令行。什么时候有点奇怪     的console.log 来自测试代码块的语句在命令行中登录。我还发现了一种更好的方法来进行一致的记录here

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

答案 7 :(得分:1)

1)转到项目目录,其中有pom.xml。在cmd中运行以下命令。 mvn茉莉花:bdd

2)您将获得localhost URL:localhost:8234(仅作为示例)。

3)在浏览器中运行此URL。现在,您所有的测试用例都将执行。

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