Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jasmine spy希望被称为;对象(…)”;_Javascript_Angularjs_Testing_Jasmine - Fatal编程技术网

Javascript Jasmine spy希望被称为;对象(…)”;

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

我正在完成从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" }) ].
请注意,期望值周围有一个“
对象”
,而第二个对象没有。这个测试在<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)