最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

网站源码admin18浏览0评论

将两个不同的对象与茉莉花.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

希望有帮助

发布评论

评论列表(0)

  1. 暂无评论