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

Redirect calls to console.log() to standard output in Jasmine tests

本文关键字:调用 重定向 标准输出 log 测试 Jasmine console      更新时间:2023-09-26

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

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

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

尝试

console.info('foo')

来自测试脚本。

Jasmine 1.x

您可以使用:

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

茉莉花 2+

直接使用console.log,根据下面道格拉斯-特雷德韦尔的评论。

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

process.stdout.write("this will be send to the 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');

这里有一个功能示例

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

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

我还发现,我正在测试的javascript代码元素中的console.log消息确实被写出来给测试本身stdout而不是console.log消息。

使用咕噜声/业力/茉莉花(业力-茉莉花 0.2.2)遇到了同样的问题 -

为了配合Dave Sag所说的话,我发现我正在测试的代码中的所有console.log消息都运行良好,但是我的describe() {}it() {}块中的任何内容都没有记录任何内容。

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

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

请注意,这仅在浏览器控制台中记录,并且由于某种原因不会登录命令行。有点奇怪的时候 控制台.log来自测试代码块的语句确实记录在命令行中。我还在这里找到了似乎更好的一致日志记录方法。

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

1)转到你的项目目录,在那里你有你的pom.xml。在 cmd 中运行以下命令。MVN 茉莉花:BDD

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

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

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