diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index e5af1c85..18d6eb56 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -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) { diff --git a/spec/core/matchers/toEqualSpec.js b/spec/core/matchers/toEqualSpec.js index 74a20587..774a2163 100644 --- a/spec/core/matchers/toEqualSpec.js +++ b/spec/core/matchers/toEqualSpec.js @@ -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 = {}; diff --git a/src/core/matchers/matchersUtil.js b/src/core/matchers/matchersUtil.js index 9a3a586e..2cfde95e 100644 --- a/src/core/matchers/matchersUtil.js +++ b/src/core/matchers/matchersUtil.js @@ -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) {