在茉莉花检查对象相等
茉莉花内置了匹配器toBe
和toEqual
。 如果我有这样一个对象:
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,你应该编写自己的比较amount
和currency
的匹配器:
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();