柴中唯一拥有的对象属性的深层对象平等

mar*_*ark 5 javascript chai

我有一个对象要与chaijs中的另一个对象进行深入比较。麻烦在于,一个对象具有大量可枚举的属性,而另一个对象是一个简单直接的对象({})。

例如,我有一个对象,expect(obj1).to.eql(obj2);obj1是一个具有许多其他可枚举属性的对象,该对象是通过库添加并obj2通过创建的var obj2 = { someValue: true }

这个问题可以通过滥用来解决JSON.stringifyJSON.parse就像这样

expect(JSON.parse(JSON.stringify(obj1))).to.eql(obj2);
Run Code Online (Sandbox Code Playgroud)

但这真是个la脚的骇客。我无法想象自己是第一个遇到这种困境的人,但是我的搜索却空了。这里推荐的方法是什么?

Han*_*son 0

我建议对要测试的对象进行投影,该对象仅包含“自己的”(不是来自原型链)属性,并比较其是否相等。

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)

您可以将该投影代码提取到测试实用函数中。