我有一个对象要与chaijs中的另一个对象进行深入比较。麻烦在于,一个对象具有大量可枚举的属性,而另一个对象是一个简单直接的对象({})。
例如,我有一个对象,expect(obj1).to.eql(obj2);它obj1是一个具有许多其他可枚举属性的对象,该对象是通过库添加并obj2通过创建的var obj2 = { someValue: true }。
这个问题可以通过滥用来解决JSON.stringify,JSON.parse就像这样
expect(JSON.parse(JSON.stringify(obj1))).to.eql(obj2);
Run Code Online (Sandbox Code Playgroud)
但这真是个la脚的骇客。我无法想象自己是第一个遇到这种困境的人,但是我的搜索却空了。这里推荐的方法是什么?
我建议对要测试的对象进行投影,该对象仅包含“自己的”(不是来自原型链)属性,并比较其是否相等。
var projection = {};
for (var key in obj1) {
if (obj1.hasOwnProperty(key)) {
projection[key] = obj1[key];
}
}
expect(projection).to.eql(obj2);
Run Code Online (Sandbox Code Playgroud)
您可以将该投影代码提取到测试实用函数中。
| 归档时间: |
|
| 查看次数: |
1850 次 |
| 最近记录: |