将两个不同的对象与茉莉花.toEqual进行比较,一个对象为空,另一个对象的键为符号,为什么它表示它们相等?

编程入门 行业动态 更新时间:2024-10-10 07:31:43

将两个不同的<a href=https://www.elefans.com/category/jswz/34/1771306.html style=对象与茉莉花.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进行比较,一个对象为空,另一个对象的键为符号,为什么它表示它们相等?

本文发布于:2024-05-07 01:18:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1754053.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象   茉莉花   为空   符号   两个

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!