javascript - Console.log 在 Karma/Jasmine 上不能正常工作

标签 javascript karma-jasmine

我有一个结构

myObject={
   Items:[
   {
    namePizza:{}
    quantity: int
   }
   {
    namePizza:{}
    quantity: int
   }
  ]
}

如果尝试 console.log(myObject) Karma 总是返回 LOG:{Items:[]}

我不明白为什么会这样。

最佳答案

一个普通的 console.log 将向您显示 javascript 对象的内部内容

> console.log({1,2})
> Object { 1, 2 }

但是为什么通过 karma 调用 console.log 的行为不同!

挖掘 karma 代码; Karma 修改了原始的 console 以提取消息并将元数据添加到每个日志。因此,为了拥有一个安全的记录器并能够记录作为参数提供给它们的所有内容,这些库将您传递给记录器的数据stringify

这是 karma 记录器中到底发生了什么:

values.push(this.stringify(args[i], 3))

如您所见,他们有自己的记录器实现。

修改后的记录器调用stringify针对您发送的数据。

您可以在此处查看发生“字符串化”的 karma 记录器:https://github.com/karma-runner/karma/blob/master/context/karma.js#L16

实际上大多数测试运行器或日志记录传输(例如哨兵的 ravenJS)都会做这样的事情。

解决这个问题;调用 console.log

时用 JSON.stringify 包裹你的对象

请注意,JSON.stringify 不适用于 SetsMaps 及其对应的 weak。对于那些你必须调用 .values() 来让记录器正常工作的人!

关于javascript - Console.log 在 Karma/Jasmine 上不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47463695/

相关文章:

javascript - 试图弄清楚为什么代码不会呈现列表

angularjs - Karma 中如何涵盖声明?

angularjs - 无法为 Angularjs 设置 Karma 和 Jasmine

angularjs - 单元测试 $window 调整大小方法

javascript - 使用 JQuery 切换元素会使父元素的一部分消失

javascript - 如何使用 javascript 在 aframe 中创建快速菜单

抛出 Angular 6 更新规范 [object ErrorEvent]

javascript - typescript - Jasmine 中无效参数的测试用例

javascript - 相对于另一个 "<li>"增加 "<li>"的高度

javascript - 使用 Meteor 触发两次 touchend 事件