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?
==
и===
совершенно неправильно. Два разных экземпляра объекта с одинаковым содержимым вернут false. Для любого не-примитивов,==
и===
ведут себя одинаково. jsfiddle.net/9mrmyrs6==
или===
, никакого принуждения нет. Андреас говорит, что вы можете создать собственный сопоставитель. Последнее утверждение о том, как решить эту проблему, является «правильным», но объяснение в первом абзаце просто неверно.jasmine
будет фактически проверять содержимое объекта, если вы используетеtoBe()
вместоequals
a == b
все равно будет давать ложные , еслиa
иb
разные случаи, вы можете изменить свой ответ