Проверка равенства объектов в Jasmine
Жасмин имеет встроенные счетчики 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
метод и пользовательский сопоставитель, но это просто кажется много работы.
каков стандартный способ сравнения объектов в Jasmine?
4 ответа:
Я искал то же самое и нашел существующий способ сделать это без какого-либо пользовательского кода или сопоставителей. Используйте
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" })); }); });
его ожидаемое поведение, так как два экземпляра объекта не совпадают в 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
для чистого теста вы должны написать свой собственный matcher, который сравнивает
amount
иcurrency
:beforeEach(function() { this.addMatchers({ sameAmountOfMoney: function(expected) { return this.actual.currency == expected.currency && this.actual.amount == expected.amount; } }); });
ваша проблема заключается в правдивости. Вы пытаетесь сравнить два разных экземпляра объекта, который истинен для регулярного равенства ( a == b), но не истинен для строгого равенства (a === b). Компаратор, который использует Жасмин Жасмин.ОКР.equals_ () который ищет строгое равенство.
чтобы выполнить то, что вам нужно, не меняя свой код, вы можете использовать регулярное равенство, проверяя правдивость с чем-то вроде следующее:
expect(money1.sum() == money2.sum()).toBeTruthy();