在茉莉花检查对象相等

茉莉花内置了匹配器toBetoEqual 。 如果我有这样一个对象:

 function Money(amount, currency){ this.amount = amount; this.currency = currency; this.sum = function (money){ return new Money(200, "USD"); } } 

并尝试比较new Money(200, "USD")和总和的结果,这些内置的匹配器将无法按预期工作。 我已经设法实现了基于自定义equals方法和自定义匹配器的解决方法 ,但似乎还有很多工作要做。

什么是茉莉花比较对象的标准方法?

我正在寻找同样的东西,并find了一个现有的方式来做到这一点,没有任何自定义代码或匹配器。 使用toEqual()

如果你想比较部分对象,你可以考虑:

 describe("jasmine.objectContaining", function() { var foo; beforeEach(function() { foo = { a: 1, b: 2, bar: "baz" }; }); it("matches objects with the expect key/value pairs", function() { expect(foo).toEqual(jasmine.objectContaining({ bar: "baz" })); }); }); 

比照 jasmine.github.io/partial-matching

它的预期行为,因为对象的两个实例在JavaScript中是不一样的。

 function Money(amount, currency){ this.amount = amount; this.currency = currency; this.sum = function (money){ return new Money(200, "USD"); } } var a = new Money(200, "USD") var b = a.sum(); console.log(a == b) //false console.log(a === b) //false 

对于一个干净的testing,你应该编写自己的比较amountcurrency的匹配器:

 beforeEach(function() { this.addMatchers({ sameAmountOfMoney: function(expected) { return this.actual.currency == expected.currency && this.actual.amount == expected.amount; } }); }); 

你的问题是真诚的。 你正试图比较两个不同的对象的实例,对于正则相等(a == b)是正确的,但对于严格相等(a === b)则不正确。 茉莉花使用的比较器是严格平等的jasmine.Env.equals_() 。

为了在不改变代码的情况下实现你所需要的东西,你可以使用一些类似下面的东西来检查真实性。

 expect(money1.sum() == money2.sum()).toBeTruthy();