繁体   English   中英

Jasmine spy 期望用“Object(...)”调用

[英]Jasmine spy expects to be called with "Object(...)"

我正在完成从 Jasmine 1.3 到 2.0 的迁移。 到目前为止,我已经重构了大部分代码以符合 2.0 的更新语法。 但是,某些类型的测试仍然失败。

简而言之,我的测试如下所示:

var obj = new CustomCriteria();

spyOn(my, "function");
my.function(obj);
expect(my.function).toHaveBeenCalledWith({ big: "fat object" });

我的CustomCriteria类:

var CustomCriteria = function() {
    this.big = "fat object";
};

测试失败,原因如下:

Expected spy function to have been called with [ Object({ big: "fat object" }) ] but actual calls were [ ({ big: "fat object" }) ].

请注意期望如何有一个“ Object ”环绕它,但第二个没有。 这个测试在 Jasmine < 2.0 中没有失败,但在我更新 Jasmine 后现在失败了。 我怎样才能解决这个问题?

更新:我修改了通过new function与对象字面量语法创建新对象的function ,看起来__proto__ s 是不同的。 也许这会影响茉莉花的平等比较?

在版本 2 之前,如果对象具有相同的属性和值,则对象相等(请参阅v1.3.1 代码

从版本 2 开始,还比较了对象构造函数(请参阅v2.0 代码)。

在您的情况下: CustomCriteria{}没有相同的构造函数。

PS:异常消息也更改为在其中包含构造函数名称。

var x = {a:1}; var y ={a:1};

x 和 y 将无法在 jasmine 中进行比较(我相信它使用 ===),因为 x 和 y 只是对对象文字的引用。

expect(my.function).toHaveBeenCalledWith(obj)不会失败,因为对象引用会匹配。 如果您没有要比较的确切对象引用,您可以使用 my.function.calls 检查调用的参数以检查某些字段的相等性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM