Javascript 在单元测试中,如何比较原始对象和范围副本,并避免角度$$hashKey

Javascript 在单元测试中,如何比较原始对象和范围副本,并避免角度$$hashKey,javascript,angularjs,unit-testing,mocha.js,chai,Javascript,Angularjs,Unit Testing,Mocha.js,Chai,我可以用一幅图来解释我的问题 在一些操作之后的单元测试中,我想检查$scope.data(第一条日志消息)是否等于原始数据对象(第二条日志消息)。我用摩卡+柴和咖啡 expect(innerScope.data).to.deep.equal(data); 它在指令中使用,所以angular将$$hashKey添加到每个对象,当然我的期望是错误的。如何用其他方法测试它?我只能想到两种方法: 1:在比较之前,从innerScope.data对象中删除$$hashKey属性: innerScope

我可以用一幅图来解释我的问题

在一些操作之后的单元测试中,我想检查
$scope.data
(第一条日志消息)是否等于原始
数据
对象(第二条日志消息)。我用摩卡+柴和咖啡

expect(innerScope.data).to.deep.equal(data);

它在指令中使用,所以angular将$$hashKey添加到每个对象,当然我的期望是错误的。如何用其他方法测试它?

我只能想到两种方法:

1:在比较之前,从innerScope.data对象中删除$$hashKey属性:

innerScope.data.forEach(function (o) { delete o.$$hashKey });
expect(innerScope.data).to.deep.equal(data);
2:循环遍历对象并测试innerScope.data中的每个对象是否包含原始数据中的相应对象,这将忽略innerScope.data对象上的任何额外属性:

for (var i = 0; i < innerScope.data.length; i++) {
    expect(innerScope.data[i]).to.contain(data[i]);
}
for(变量i=0;i
我知道这不是一个新问题,但是jasmine.objectContaining方法在这里会有所帮助

您也可以在两个对象上使用该方法生成字符串,而无需
$$hashKey
var clean=JSON.parse(angular.toJson(dirty));