-
-
Notifications
You must be signed in to change notification settings - Fork 6.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: handle pretty formatting of wide arrays and array-like objects #12402
fix: handle pretty formatting of wide arrays and array-like objects #12402
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yay, this is awesome!
also please include a changelog entry 🙂
Thank you for your pull request and welcome to our community. Action RequiredIn order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you. ProcessIn order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA. Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with If you have received this in error or have any questions, please contact us at cla@fb.com. Thanks! |
prefer to use these operators where possible on the options object Refactor requested during review
? '' | ||
: createIndent(options?.indent ?? DEFAULT_OPTIONS.indent), | ||
maxDepth: options?.maxDepth ?? DEFAULT_OPTIONS.maxDepth, | ||
maxWidth: options?.maxWidth ?? DEFAULT_OPTIONS.maxWidth, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Functionally, the maxWidth
is the only newly introduced behaviour in this block. The rest of this block diff is related to a refactor to make use of the safe navigation and null coalescing operators so that
options && options.foo ? options.foo : DEFAULT_OPTIONS.foo
can become
options?.foo ?? DEFAULT_OPTIONS.foo
Thank you for signing our Contributor License Agreement. We can now accept your code for this (and any) Meta Open Source project. Thanks! |
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
Fixes #12364
Jest will attempt to avoid printing very deeply nested objects beyond a certain depth when writing output from matchers, but it doesn't have the same mechanism for very wide objects.
As a result, very large arrays can cause Jest to run out of memory when a matcher fails and jest attempts to pretty-print the array.
This change introduces a
maxWidth
parameter to thepretty-format
package to complement the existingmaxWidth
parameter so that it can be used byjest-matcher-utils
(and potentially others) to limit the impact of printing very wide objects. For now this applies to Arrays, Sets, and Maps, but in the future could also be used by custom plugins, serializers, or other pretty formatting elements.Test plan
Added tests to validate the behaviour and tested against code that previously resulted in out-of-memory errors that now fails correctly.