Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用jasmine.toEqual比较两个不同的对象,一个对象是空的,另一个有一个作为符号的键,为什么它说它们相等?_Javascript_Node.js_Unit Testing_Jasmine - Fatal编程技术网

Javascript 用jasmine.toEqual比较两个不同的对象,一个对象是空的,另一个有一个作为符号的键,为什么它说它们相等?

Javascript 用jasmine.toEqual比较两个不同的对象,一个对象是空的,另一个有一个作为符号的键,为什么它说它们相等?,javascript,node.js,unit-testing,jasmine,Javascript,Node.js,Unit Testing,Jasmine,这是我的期望声明 const otherObject = { [Symbol('what')]: { key: 'value' } }; expect({}).toEqual(otherObject); // succeeds 期望测试失败 为什么jasmine报告这个测试成功了?我正在使用jasmine@3.5 这是codesandbox它当前无法使用符号作为键。当jasmine进行比较时,它会尝试获取对象的键,请参阅,用于提取键的函数使用对象。键,请参阅 请参见下面的示例 const ot

这是我的期望声明

const otherObject = { [Symbol('what')]: { key: 'value' } };
expect({}).toEqual(otherObject); // succeeds
期望测试失败

为什么jasmine报告这个测试成功了?我正在使用jasmine@3.5


这是codesandbox

它当前无法使用
符号
作为键。当
jasmine
进行比较时,它会尝试获取对象的
键,请参阅,用于提取键的函数使用
对象。键
,请参阅

请参见下面的示例

const otherObject = { [Symbol('what')]: { key: 'value' } };
console.log(Object.keys(otherObject)); // ouput []
因此,当
jasmine
运行比较
expect({}).toEqual(otherObject)
它是比较的,如果使用深度相等比较的
{}
等于
{}
,并且它是
真的
,它是比较两个空对象,从字面上说

如果使用下面的示例失败,它也不起作用,但它通过了:

const mySymbol = Symbol('what');
const otherObject = { [mySymbol]: { key: 'value' } };
expect(otherObject).toEqual(
  jasmine.objectContaining({ [mySymbol]: { key: 'value2' } })
);
因此,您可以使用迭代对象,并为每个值编写期望值

或者,你可以向贾斯敏团队打开一个特性请求,所以他们考虑验证<代码>符号< /代码>,而不仅仅是键。


希望能有所帮助

感谢您的详细解释和链接!