gpt4 book ai didi

通过 json 字符串与构建器创建对象时的 Javascript 深层对象相等性

转载 作者:行者123 更新时间:2023-11-30 16:06:54 24 4
gpt4 key购买 nike

我有一些调用 HTTP API 的测试。我已经 mock 了他们并正在使用构建器来创建相关的 JSON 以提供更多含义。我在其他语言中使用过类似的模式,我正在尝试在 javascript 中使用它。

我遇到的问题是,即使我通过构建器创建的内容和我手动构建的 json 对象看起来(对我来说)相等,但就 js 而言,它们并不应该如此。

我已经链接了一个 fiddle ,希望它足够清晰易懂:https://jsfiddle.net/sp89cc95/

我的生成器如下:

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;
}

那么我的测试设置很简单

var builder = new PersonBuilder();
var expected = {
"name": "Bob",
"age": 25,
"hobbies": ["Coding"]
}

断言:

builder.should.eql(expected);

这个断言失败了。当我检查对象时,它们都会打印

{"name":"Bob","age":25,"hobbies":["Coding"]}

我从调试中观察到问题是数组引起的。当我 console.log 它显示的对象时 [Object]。但是,如果我只记录数组,我会得到 ['Coding']

我可以手动提取数组的内容并比较它们的相等性,但我认为 should.eql 的深度相等性检查可以为我完成这项工作。

如有任何帮助,我们将不胜感激。如果有更好的方法来编写构建器或测试他们的输出,我会洗耳恭听。这是通过几个小时的谷歌搜索和一些反复试验找到的解决方案。我确定我只是缺少一些简单的东西。

提前致谢

最佳答案

不相等可能是由于原型(prototype)方法,尝试添加创建具有属性但没有原型(prototype)方法的对象的构建方法。

关于通过 json 字符串与构建器创建对象时的 Javascript 深层对象相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36899441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com