茉莉花间谍希望用"对象(...)"

时间:2015-07-23 22:28:43

标签: 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 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是不同的。也许这影响了茉莉花的平等比较?

2 个答案:

答案 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以检查某些字段的相等性。