Javascript Jasmine spy希望被称为;对象(…)”;
我正在完成从Jasmine 1.3到2.0的迁移。到目前为止,我已经重构了大部分代码,以符合2.0较新的语法。然而,某种测试仍然失败 简而言之,我的测试如下所示:Javascript Jasmine spy希望被称为;对象(…)”;,javascript,angularjs,testing,jasmine,Javascript,Angularjs,Testing,Jasmine,我正在完成从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 Cust
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" }) ].
请注意,期望值周围有一个“对象”
,而第二个对象没有。这个测试在<2.0的Jasmine中没有失败,但是在我更新Jasmine之后现在失败了。我怎样才能解决这个问题
更新:我通过new
使用函数
和对象文本语法创建了一个新对象,而\uuuuuuuuuuu
似乎有所不同。也许这会影响Jasmine的平等比较
var x = {a:1}; var y ={a:1};
在jasmine中,x和y的比较将失败(我相信它使用==),因为x和y只是对对象文本的引用
expect(my.function).tohavencalledwith(obj)
不会失败,因为对象引用会匹配。您可以使用my.function.calls检查调用的参数,如果没有要比较的确切对象引用,则检查某些字段的相等性。在版本2之前,如果对象具有相同的属性和值,则对象相等(请参阅)
从版本2开始,还比较了对象构造函数(请参见)
在您的情况下:CustomCriteria
和{}
没有相同的构造函数
p.S.:异常消息也更改为包含构造函数名称。您可以创建一个新的CustomCritieria并通过它吗?既然您在测试范围内拥有所有必要的资源,您不妨检查
。toHaveBeenCalledWith(obj)