我正在完成从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
"环绕它,但第二个没有。该测试没有在<茉莉花2.0,但是在我更新Jasmine后现在失败了。我该如何解决这个问题?
更新:我通过new
function
与对象文字语法创建了一个新对象,看来__proto__
s是不同的。也许这影响了茉莉花的平等比较?
答案 0 :(得分:3)
在版本2之前,如果对象具有相同的属性和值,则它们是相等的(请参阅v1.3.1 code)
从版本2开始,还会比较对象构造函数(请参阅v2.0 code)。
在您的情况下:CustomCriteria
和{}
没有相同的构造函数。
P.S。:异常消息也更改为包含其中的构造函数名称。
答案 1 :(得分:1)
var x = {a:1}; var y = {a:1};
x和y将无法在jasmine(我相信使用===)中进行比较,因为x和y只是对象文字的引用。
期望(my.function).toHaveBeenCalledWith(obj)不会失败,因为对象引用会匹配。如果没有要比较的确切对象引用,可以使用my.function.calls检查调用的args以检查某些字段的相等性。