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