对象与茉莉花.toEqual进行比较,一个对象为空,另一个对象的键为符号,为什么它表示它们相等?"/>
将两个不同的对象与茉莉花.toEqual进行比较,一个对象为空,另一个对象的键为符号,为什么它表示它们相等?
这是我的期望声明
const otherObject = { [Symbol('what')]: { key: 'value' } };
expect({}).toEqual(otherObject); // succeeds
期望测试失败。
为什么茉莉花报告该测试成功?我正在使用[email protected]
这里是代码框
回答如下:目前仅使用Symbol
作为键无法使用。当jasmine
进行比较时,它将尝试获取对象的keys
,请参见jasmine.js#L4551,用于提取键的函数使用Object.keys
,请参见jasmine.js#L4587。
请参见以下示例
const otherObject = { [Symbol('what')]: { key: 'value' } };
console.log(Object.keys(otherObject)); // ouput []
因此,当jasmine
运行比较expect({}).toEqual(otherObject);
时,它是在使用深度相等性比较来比较{}
是否等于{}
,并且它是true
,实际上是在比较两个空对象。
使用以下应失败的示例也不起作用,但它通过了:
const mySymbol = Symbol('what');
const otherObject = { [mySymbol]: { key: 'value' } };
expect(otherObject).toEqual(
jasmine.objectContaining({ [mySymbol]: { key: 'value2' } })
);
因此,您可以使用Object.getOwnPropertySymbols迭代对象并为每个值写一个期望值。
或者,您可以向Jasmine团队提出功能请求,以便他们考虑验证Symbols
而不只是密钥。
https://github/jasmine/jasmine/issues
希望有帮助
更多推荐
将两个不同的对象与茉莉花.toEqual进行比较,一个对象为空,另一个对象的键为符号,为什么它表示它们相等?
发布评论