Vérifier l'égalité des objets dans Jasmine
Jasmine a des éléments encastrés toBe
et toEqual
. Si j'ai un objet comme celui-ci:
function Money(amount, currency){
this.amount = amount;
this.currency = currency;
this.sum = function (money){
return new Money(200, "USD");
}
}
et essayer de comparer new Money(200, "USD")
et le résultat de la somme, ces matches intégrés ne fonctionnera pas comme prévu. J'ai réussi à mettre en œuvre un work-around basé sur un personnalisé equals
méthode et matcher personnalisé, mais il semble juste à beaucoup de travail.
Quelle est la voie standard pour comparer des objets dans le Jasmin?
4 réponses
je cherchais la même chose et trouvé une façon de le faire sans aucun code personnalisé ou de rapprochement. Utilisez toEqual()
.
si vous cherchez à comparer des objets partiels, vous pourriez considérer:
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"
}));
});
});
est le comportement attendu, comme deux instances d'un objet ne sont pas les mêmes dans 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
pour un test propre vous devez écrire votre propre matcher qui compare amount
et currency
:
beforeEach(function() {
this.addMatchers({
sameAmountOfMoney: function(expected) {
return this.actual.currency == expected.currency && this.actual.amount == expected.amount;
}
});
});
votre problème est la vérité. Vous essayez de comparer deux instances différentes d'un objet qui est vrai pour l'égalité régulière ( a == b ) mais pas pour l'égalité stricte ( a === b). Le comparateur utilisé par jasmine est jasmin.Env.equals_ () qui cherche l'égalité stricte.
pour accomplir ce que vous avez besoin sans changer votre code, vous pouvez utiliser l'égalité régulière en vérifiant la vérité avec quelque chose un peu comme le
expect(money1.sum() == money2.sum()).toBeTruthy();