* Merges #1963 from @suke
* Excludes non-enumerable symbol properties from equality comparison
This commit is contained in:
Steve Gravrock
2022-05-09 16:51:47 -07:00
3 changed files with 41 additions and 4 deletions

View File

@@ -5577,8 +5577,15 @@ getJasmineRequireObj().MatchersUtil = function(j$) {
keys.push(key);
}
}
// eslint-disable-next-line compat/compat
return keys.concat(Object.getOwnPropertySymbols(o));
var symbols = Object.getOwnPropertySymbols(o);
for (var i = 0; i < symbols.length; i++) {
if (o.propertyIsEnumerable(symbols[i])) {
keys.push(symbols[i]);
}
}
return keys;
})(obj);
if (!isArray) {

View File

@@ -1067,6 +1067,29 @@ describe('toEqual', function() {
// == Symbols ==
describe('Symbols', function() {
it('Enumerable symbols are compared', function() {
const sym = Symbol('foo');
const actual = {};
Object.defineProperty(actual, sym, {
value: '',
enumerable: true
});
const expected = { [sym]: '' };
expect(actual).toEqual(expected);
});
it('Symbols that cannot be enumerated are not compared ', function() {
const sym = Symbol('foo');
const actual = {};
Object.defineProperty(actual, sym, {
value: '',
enumerable: false
});
const expected = {};
expect(actual).toEqual(expected);
});
it('Fails if Symbol compared to Object', function() {
const sym = Symbol('foo');
const obj = {};

View File

@@ -532,8 +532,15 @@ getJasmineRequireObj().MatchersUtil = function(j$) {
keys.push(key);
}
}
// eslint-disable-next-line compat/compat
return keys.concat(Object.getOwnPropertySymbols(o));
var symbols = Object.getOwnPropertySymbols(o);
for (var i = 0; i < symbols.length; i++) {
if (o.propertyIsEnumerable(symbols[i])) {
keys.push(symbols[i]);
}
}
return keys;
})(obj);
if (!isArray) {