Fix(expect-utils): Circular references not being caught when inside arrays #14894
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
As seen in issue #14734, when matching objects with
toMatchObject()
, circular references within arrays weren't caught and led to stack overflows.This fixes the issue by adapting
subsetEquality()
in/expect-utils/utils
, which is the main custom tester fortoMatchObject()
's subset matching, to track visited objects instead of their members that are objects. It already had a method of catching circular references, but that only recorded object properties, while skipping arrays, and by extension, their elements.Fixes #14734
Test plan
Added e2e tests ensuring that circular references in built in object types, namely arrays, sets, and maps, are matched correctly.