Fix: Symbol based properties in arrays causes toEqual to throw#6391
Fix: Symbol based properties in arrays causes toEqual to throw#6391cpojer merged 6 commits intojestjs:masterfrom
toEqual to throw#6391Conversation
toEqual to throw
|
|
||
| for (var x = 0; x < allKeys.length; x++) { | ||
| if (!allKeys[x].match(/^[0-9]+$/)) { | ||
| if (typeof allKeys[x] === 'symbol' || !allKeys[x].match(/^[0-9]+$/)) { |
There was a problem hiding this comment.
Pushed, used //$FlowFixMe. Hopefully that is correct, I am flow noob :)
Codecov Report
@@ Coverage Diff @@
## master #6391 +/- ##
=======================================
Coverage 63.48% 63.48%
=======================================
Files 227 227
Lines 8697 8697
Branches 4 3 -1
=======================================
Hits 5521 5521
Misses 3175 3175
Partials 1 1Continue to review full report at Codecov.
|
|
N.B.: #6392 is quite related, I am willing to PR that one as well, but wanted to verify that the solution direction is correct first |
|
Solved merge conflicts in last commit, no further changes |
This Pull Request updates dependency [jest](https://github.com/facebook/jest) from `v23.1.0` to `v23.2.0` <details> <summary>Release Notes</summary> ### [`v23.2.0`](https://github.com/facebook/jest/blob/master/CHANGELOG.md#​2320) [Compare Source](jestjs/jest@v23.1.0...v23.2.0) ##### Features - `[jest-each]` Add support for keyPaths in test titles ([#​6457](`https://github.com/facebook/jest/pull/6457`)) - `[jest-cli]` Add `jest --init` option that generates a basic configuration file with a short description for each option ([#​6442](`https://github.com/facebook/jest/pull/6442`)) - `[jest.retryTimes]` Add `jest.retryTimes()` option that allows failed tests to be retried n-times when using jest-circus. ([#​6498](`https://github.com/facebook/jest/pull/6498`)) ##### Fixes - `[jest-cli]` Add check to make sure one or more tests have run before notifying when using `--notify` ([#​6495](`https://github.com/facebook/jest/pull/6495`)) - `[jest-cli]` Pass `globalConfig` as a parameter to `globalSetup` and `globalTeardown` functions ([#​6486](`https://github.com/facebook/jest/pull/6486`)) - `[jest-config]` Add missing options to the `defaults` object ([#​6428](`https://github.com/facebook/jest/pull/6428`)) - `[expect]` Using symbolic property names in arrays no longer causes the `toEqual` matcher to fail ([#​6391](`https://github.com/facebook/jest/pull/6391`)) - `[expect]` `toEqual` no longer tries to compare non-enumerable symbolic properties, to be consistent with non-symbolic properties. ([#​6398](`https://github.com/facebook/jest/pull/6398`)) - `[jest-util]` `console.timeEnd` now properly log elapsed time in milliseconds. ([#​6456](`https://github.com/facebook/jest/pull/6456`)) - `[jest-mock]` Fix `MockNativeMethods` access in react-native `jest.mock()` ([#​6505](`https://github.com/facebook/jest/pull/6505`)) ##### Chore & Maintenance - `[docs]` Add jest-each docs for 1 dimensional arrays ([#​6444](`https://github.com/facebook/jest/pull/6444`/files)) --- </details> --- This PR has been generated by [Renovate Bot](https://renovatebot.com).
|
This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |

Summary
toEqualmatcher could not handle symbol based properties in array's, causing jest to throw:Minimal example:
Throws:
The cause of this issue is this line which assumes that all property names of arrays are strings and hence
.matchcan be called on them.This assumption does not held for symbol based properties. If the property name is a symbol, it is never an index, so it should always be added to the
extraKeyscollection.Test plan
I added a unit test demonstrating that deep equality on arrays behaves correctly now, even in the presence of symbolic properties.