Angular jasmine toEqual方法不适用于标头对象

Angular jasmine toEqual方法不适用于标头对象,angular,jasmine,karma-jasmine,Angular,Jasmine,Karma Jasmine,当我尝试测试标题对象时,toEqual未按预期工作 我在以下示例中隔离了问题: const foo = new Headers(); const bar = new Headers(); bar.append('some', 'value'); // bar is mutated expect(foo).toEqual(bar); // returns true... 尽管foo和bar不同,规范如何通过?为了回答您的问题,jasmine的toEqual方法检查严格的平等性。在Jav

当我尝试测试
标题
对象时,
toEqual
未按预期工作

我在以下示例中隔离了问题:

 const foo = new Headers();
 const bar =  new Headers();
 bar.append('some', 'value'); // bar is mutated
 expect(foo).toEqual(bar); // returns true...

尽管
foo
bar
不同,规范如何通过?

为了回答您的问题,jasmine的
toEqual
方法检查严格的平等性。在JavaScript(和TypeScript)中,如果两个对象是完全相同的对象(该对象的同一实例),则只能认为它们是100%相等的。这意味着您只能验证以下各项是否通过:

expect(foo).toEqual(foo);
这听起来没什么帮助,但在大型应用程序中,当您需要知道您拥有所需对象的确切实例时,它非常有用

关于如何用jasmine测试这一点,您可以测试
headers
对象中的各个头(例如,您可以验证
foo.get('content-type')
是否正确)

expect(foo.get('content-type')).toEqual(bar.get('content-type'));

您需要通过其键获取特定的标题值。Jasmine可能没有进行必要的深度检查以查看差异。这将更好地工作,只需要创建一个header对象

 const foo = new Headers();
 let newHeaderKey = 'some';
 let newHeaderValue = 'value';
 foo.append(newHeaderKey , newHeaderValue ); // foo is mutated
 expect(bar.headers.get(newHeaderKey )).toEqual(newHeaderValue ); // returns true...