J'ai quelques tests qui appellent une API HTTP. Je me suis moqué d'eux et j'utilise un constructeur pour créer le JSON approprié afin de donner plus de sens. J'ai utilisé des modèles similaires dans d'autres langues et j'essaie d'obtenir ce travail en JavaScript. Le problème que j'ai est que même si ce que je crée via le constructeur et l'objet json que je construis manuellement me paraissent égaux, ils ne sont pas aussi loin que je le devrais.Egalité des objets profonds Javascript lorsque l'objet est créé via une chaîne json vs builder
Je lié un violon qui, espérons assez clair pour comprendre: https://jsfiddle.net/sp89cc95/
Mon constructeur est la suivante:
var PersonBuilder = function() {
this.name = "Bob"
this.age = 25
this.hobbies = ["Coding"]
}
PersonBuilder.prototype.withName = function(name) {
this.name = name;
return this;
}
PersonBuilder.prototype.withAge = function(age) {
this.age = age;
return this;
}
PersonBuilder.prototype.withHobby = function(hobby) {
this.hobbies = [hobby]
return this;
}
PersonBuilder.prototype.addHobby = function(hobby) {
this.hobbies.push(hobby)
return this;
}
Ensuite, ma configuration de test est simplement
var builder = new PersonBuilder();
var expected = {
"name": "Bob",
"age": 25,
"hobbies": ["Coding"]
}
Et la affirmation:
builder.should.eql(expected);
Cette assertion échoue. Lorsque j'inspecte les objets, ils impriment tous les deux
{"name":"Bob","age":25,"hobbies":["Coding"]}
Mes observations de débogage sont que le tableau est à l'origine du problème. Quand je console.log
l'objet montre [Object]
. Mais si je me connecte juste le tableau, je reçois ['Coding']
.
Je peux extraire le contenu des tableaux manuellement et comparer leur égalité, mais je pensais que la vérification d'égalité en profondeur de should.eql
ferait cela pour moi.
Toute aide serait grandement appréciée. S'il y a de meilleures façons d'écrire des constructeurs ou de tester leurs résultats, je suis tout ouïe. C'est la solution trouvée de quelques heures de googling et quelques essais et erreurs. Je suis sûr que c'est quelque chose de simple, je suis juste manquant.
Merci à l'avance
Essayez 'JSON.stringify (builder) .should.eql (JSON.stringify (attendu));' – alexmac
Merci pour la réponse, je pense qu'avoir une fonction de construction est la meilleure façon depuis que cela me permet de vérifier l'égalité de l'objet lui-même et non son rendu. Bien que dans ce cas, il produirait le même résultat. – Shifty