Vérification de l'objet de l'égalité dans l'Jasmin
Jasmin a intégré les allumettes toBe
et toEqual
. Si j'ai un objet comme ceci:
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, de ces de rapprochement ne fonctionnera pas comme prévu. J'ai réussi à mettre en œuvre une solution basée sur une coutume equals
méthode et de correspondance personnalisée, mais il semble tout de beaucoup de travail.
Ce qui est la façon standard de comparer des objets dans le Jasmin?
Vous devez vous connecter pour publier un commentaire.
Je cherchais la même chose et trouvé une façon de le faire sans aucun code personnalisé ou de rapprochement. Utilisation
toEqual()
.Si vous êtes à la recherche pour comparer partielle des objets, vous pouvez envisager:
cf. le jasmin.objectContaining">jasmin.github.io/partielle correspondant
Son le comportement attendu, comme deux instances d'un objet ne sont pas les mêmes en JavaScript.
Pour un nettoyage de test, vous devez écrire votre propre comparateur qui compare
amount
etcurrency
:Votre problème est avec truthyness. Vous êtes en train de comparer deux instances différentes d'un objet qui est vrai pour les réguliers de l'égalité ( a == b), mais pas vrai pour une égalité stricte ( a === b). Le comparateur que le jasmin est utilise
le jasmin.Env.equals_() qui ressemble à une stricte égalité.
Pour accomplir ce que vous avez besoin sans changer votre code, vous pouvez utiliser le régulier de l'égalité par la vérification de truthyness avec quelque chose d'un peu semblable à la suivante:
==
et===
est complètement faux. Deux instances différentes d'un objet avec le même contenu sera à la fois de retour faux. Pour tout non-primitives,==
et===
se comportent de façon identique. jsfiddle.net/9mrmyrs6==
ou===
, il n'y a pas de coercition en cause. Andreas est à dire que vous pouvez créer une correspondance personnalisée. La dernière instruction sur la façon de résoudre ce problème est "correct" mais l'explication dans le premier paragraphe est tout simplement faux.jasmine
vérifient objet contenu si vous utiliseztoBe()
au lieu deequals
a == b
va encore donner de faux sia
etb
sont des instances différentes, vous pouvez modifier votre réponse