-
-
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
[Feature] Add support for custom equality testers #13654
Conversation
Co-authored-by: Tom Mrazauskas <[email protected]>
466265c
to
1c9b629
Compare
First, thanks a lot for the PR! You claim that the
code:
I ended up with similar code main...michkot:jest:addCustomDefaultEqualityTestersForExpectUtilsEqual with my hack, and the biggest downside was, that the behavior was always global :/ |
iterableEquality(a, b, [...customTesters], [...aStack], [...bStack]); | ||
|
||
customTesters = [ | ||
...customTesters.filter(t => t !== iterableEquality), |
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.
why the check? deserver's a code comment i think
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.
is it to prevent infinite recursion in case somebody would manage to add the build-in iterableEquality (somehow imported it directly) into the customTesters array in configuration?
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.
Yup - except here all testers are passed in the full array of custom testers, including themselves. So currently it is guaranteed you'll be called with yourself in the custom testers array.
I could also do the filtering in the custom testers loop in equals
so a tester is never called for itself, but I wasn't sure that was worth since not every tester would need this since not every tester is recursive, but maybe it would make the API easier to work with.
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.
Ye, not sure about the additional filtering...
const result = this.equals( | ||
expected, | ||
actual, | ||
jestExpect.customEqualityTesters, |
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.
not sure whether ... having to / having the option to... specify override of the customEqualityTesters here is a good thing
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.
The idea here is to enable custom matchers to have the same capabilities as the built in matchers. Built-in matchers need to pass in custom equality testers to equals
and so I would like custom matchers to have ability to do the same.
We could look overriding the equals
implementation on MatcherContext
to automatically pass in custom testers, but then a matcher couldn't customize the testers, which it might want to do. So my thinking was to just require custom matchers to do what the built-in matchers and pass in custom equality testers.
If we change the expect API to something like expect.addEqualityTesters
, it would be nice to provide some API for custom matchers to access the added testers. Perhaps as a property on MatcherContext
?
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.
So my thinking was to just require custom matchers to do what the built-in matchers and pass in custom equality testers.
Okey, I understand the approach = custom matchers must opt-in to global custom eq. testers being used. I also think its the "safes one", however...
The gotcha is that anyone having custom matchers (especially imported ones) that are not aware of "this PR" might not be passing the testers, while their user (which set-up some custom eq. testers using this PR) would like these extra matchers to respect the custom testers... That leads me to an idea, that maybe the global custom eq testers should be used with custom matchers by default, and they would have to opt-out / override to use different set of them (e.g. empty set).
Note: it's (definitely) a good think that the custom equality testers in your PR (now) have precedence over the built-ins. To illustrate, if you would attempt .equals() on two different objects of the same prototype and that both have0 own properties, only own #private fields (which Jest can not see) and some inherited properties (including getters that would return different values, but Jest ignores that) , then the default equality testers in .equals() would return true, because they look like empty objects of the same prototypes :/ => custom equality testers need run sooner there might also be use-case for some other custom equality testers to be attempted after the built-in ones (added fallback instead of override), but I do not know of one right now. |
Hey @michkot! Thanks for taking a look and thoughtful comments. Re: running custom equality testers after built-in ones - I think for now we could probably keep it simple and just always run custom testers first. |
@andrewiggins anything I can do to help push this PR towards successful merging? ;) |
@michkot I've changed the API to |
I'm on board 👍 |
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.
I've added documentation and updated tests to more accurately represent sample usage. I also added a test specifically for recursive testers to demonstrate and test how they work.
docs/ExpectAPI.md
Outdated
For example, let's say you have a `Book` class that contains an array of `Author` classes and both of these classes have custom testers. The `Book` custom tester would want to do a deep equality check on the array of `Author`s and pass in the custom testers so the `Author`s custom equality tester is applied: | ||
|
||
```js title="customEqualityTesters.js" | ||
import {equals} from '@jest/expect-utils'; |
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.
can we ask people to use this.equals
instead of importing it?
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.
I'd be happy to, but currently customTesters are called without any this
context (source from this PR). Custom testers are invoked by equals
in the expect-utils package and so don't have access to the matcher context.
One idea to avoid importing encouraging importing equals
would be to create an EqualityTesterContext with equals
and invoke equality testers with that, similar to what we do for matchers and MatchContext. Should I do that?
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.
right, that makes sense! Yeah, I think we should have a context with at least equals
(maybe only that for now?). That way, if people publish custom equality testers, they don't need to care what version of Jest people are using (beyond 29.4+) when we release 30, 31 etc..
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.
Oh nice! Yea, that makes sense. I believe the latest changes I've pushed do this. Let me know if you see anything else missing!
I've also re-exported the Tester
and TesterContext
types from the expect
package. My thinking was that since those types are implicitly exposed through expect.addEqualityTester
, explicitly exporting them would make using TypeScript a little easier and better mirror what people can do with expect.extend
with the MatcherFunction
and MatcherContext
types. However, if you'd prefer people import Tester
and TesterContext
directly from @jest/expect-utils
, we can simply revert that commit.
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.
sounds good 👍
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.
thanks for adding docs! Very thorough and explains the usage well 👍
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.
Thanks for taking another look and the approval @SimenB ❤️ Just one more comment thread for us to resolve 😄
docs/ExpectAPI.md
Outdated
For example, let's say you have a `Book` class that contains an array of `Author` classes and both of these classes have custom testers. The `Book` custom tester would want to do a deep equality check on the array of `Author`s and pass in the custom testers so the `Author`s custom equality tester is applied: | ||
|
||
```js title="customEqualityTesters.js" | ||
import {equals} from '@jest/expect-utils'; |
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.
I'd be happy to, but currently customTesters are called without any this
context (source from this PR). Custom testers are invoked by equals
in the expect-utils package and so don't have access to the matcher context.
One idea to avoid importing encouraging importing equals
would be to create an EqualityTesterContext with equals
and invoke equality testers with that, similar to what we do for matchers and MatchContext. Should I do that?
Tester, | ||
TesterContext, | ||
expect, | ||
} from 'expect'; |
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.
This re-export looks right. Thanks!
Thanks for a fantastic contribution @andrewiggins! And thanks for reviewing @michkot and @mrazauskas 👍 |
<h3>Snyk has created this PR to upgrade multiple dependencies.</h3> 👯 The following dependencies are linked and will therefore be updated together. </br></br> :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project. </br></br> Name | Versions | Released on :-------------|:-------------|:------------- **babel-jest**</br>from 29.3.1 to 29.4.0 | **1 version** ahead of your current version | **22 days ago**</br>on 2023-01-24 **jest**</br>from 29.3.1 to 29.4.0 | **1 version** ahead of your current version | **22 days ago**</br>on 2023-01-24 <details> <summary><b>Release notes</b></summary> <br/> <details> <summary>Package name: <b>babel-jest</b></summary> <ul> <li> <b>29.4.0</b> - <a href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0">2023-01-24</a></br><h2>Features</h2> <ul> <li><code>[expect, @ jest/expect-utils]</code> Support custom equality testers (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13654" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13654/hovercard">#13654</a>)</li> <li><code>[jest-config, jest-worker]</code> Use <code>os.availableParallelism</code> if available to calculate number of workers to spawn (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13738" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13738/hovercard">#13738</a>)</li> <li><code>[@ jest/globals, jest-mock]</code> Add <code>jest.replaceProperty()</code> that replaces property value (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13496" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13496/hovercard">#13496</a>)</li> <li><code>[jest-haste-map]</code> ignore Sapling vcs directories (<code>.sl/</code>) (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13674" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13674/hovercard">#13674</a>)</li> <li><code>[jest-resolve]</code> Support subpath imports (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13705" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13705/hovercard">#13705</a>, <a href="https://snyk.io/redirect/github/facebook/jest/pull/13723" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13723/hovercard">#13723</a>, <a href="https://snyk.io/redirect/github/facebook/jest/pull/13777" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13777/hovercard">#13777</a>)</li> <li><code>[jest-runtime]</code> Add <code>jest.isolateModulesAsync</code> for scoped module initialization of asynchronous functions (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13680" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13680/hovercard">#13680</a>)</li> <li><code>[jest-runtime]</code> Add <code>jest.isEnvironmentTornDown</code> function (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13741" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13741/hovercard">#13741</a>)</li> <li><code>[jest-test-result]</code> Added <code>skipped</code> and <code>focused</code> status to <code>FormattedTestResult</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13700" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13700/hovercard">#13700</a>)</li> <li><code>[jest-transform]</code> Support for asynchronous <code>createTransformer</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13762" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13762/hovercard">#13762</a>)</li> </ul> <h2>Fixes</h2> <ul> <li><code>[jest-environment-node]</code> Fix non-configurable globals (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13687" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13687/hovercard">#13687</a>)</li> <li><code>[@ jest/expect-utils]</code> <code>toMatchObject</code> should handle <code>Symbol</code> properties (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13639" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13639/hovercard">#13639</a>)</li> <li><code>[jest-mock]</code> Fix <code>mockReset</code> and <code>resetAllMocks</code> <code>undefined</code> return value(<a href="https://snyk.io/redirect/github/facebook/jest/pull/13692" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13692/hovercard">#13692</a>)</li> <li><code>[jest-resolve]</code> Add global paths to <code>require.resolve.paths</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13633" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13633/hovercard">#13633</a>)</li> <li><code>[jest-resolve]</code> Correct node core module detection when using <code>node:</code> specifiers (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13806" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13806/hovercard">#13806</a>)</li> <li><code>[jest-runtime]</code> Support WASM files that import JS resources (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13608" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13608/hovercard">#13608</a>)</li> <li><code>[jest-runtime]</code> Use the <code>scriptTransformer</code> cache in <code>jest-runner</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13735" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13735/hovercard">#13735</a>)</li> <li><code>[jest-runtime]</code> Enforce import assertions when importing JSON in ESM (<a href="https://snyk.io/redirect/github/facebook/jest/pull/12755" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/12755/hovercard">#12755</a> & <a href="https://snyk.io/redirect/github/facebook/jest/pull/13805" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13805/hovercard">#13805</a>)</li> <li><code>[jest-snapshot]</code> Make sure to import <code>babel</code> outside of the sandbox (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13694" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13694/hovercard">#13694</a>)</li> <li><code>[jest-transform]</code> Ensure the correct configuration is passed to preprocessors specified multiple times in the <code>transform</code> option (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13770" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13770/hovercard">#13770</a>)</li> </ul> <h2>Chore & Maintenance</h2> <ul> <li><code>[@ jest/fake-timers]</code> Update <code>@ sinonjs/fake-timers</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13612" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13612/hovercard">#13612</a>)</li> <li><code>[docs]</code> Improve custom puppeteer example to prevent worker warnings (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13619" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13619/hovercard">#13619</a>)</li> </ul> <h2>New Contributors</h2> <ul> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lvqq/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/lvqq">@ lvqq</a> made their first contribution in <a aria-label="Pull request #13633" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1458233845" data-permission-text="Title is private" data-url="jestjs/jest#13633" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13633/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13633">#13633</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zjfresh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/zjfresh">@ zjfresh</a> made their first contribution in <a aria-label="Pull request #13682" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1504316630" data-permission-text="Title is private" data-url="jestjs/jest#13682" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13682/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13682">#13682</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rnwst/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/rnwst">@ rnwst</a> made their first contribution in <a aria-label="Pull request #13635" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1460619742" data-permission-text="Title is private" data-url="jestjs/jest#13635" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13635/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13635">#13635</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/overlookmotel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/overlookmotel">@ overlookmotel</a> made their first contribution in <a aria-label="Pull request #13687" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1507865711" data-permission-text="Title is private" data-url="jestjs/jest#13687" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13687/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13687">#13687</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mmanciop/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/mmanciop">@ mmanciop</a> made their first contribution in <a aria-label="Pull request #13680" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1500954532" data-permission-text="Title is private" data-url="jestjs/jest#13680" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13680/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13680">#13680</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jeroendevr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/Jeroendevr">@ Jeroendevr</a> made their first contribution in <a aria-label="Pull request #13428" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1404420168" data-permission-text="Title is private" data-url="jestjs/jest#13428" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13428/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13428">#13428</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/falsyvalues/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/falsyvalues">@ falsyvalues</a> made their first contribution in <a aria-label="Pull request #13619" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1453483771" data-permission-text="Title is private" data-url="jestjs/jest#13619" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13619/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13619">#13619</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vegerot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/vegerot">@ vegerot</a> made their first contribution in <a aria-label="Pull request #13674" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1495407600" data-permission-text="Title is private" data-url="jestjs/jest#13674" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13674/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13674">#13674</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/faustAbc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/faustAbc">@ faustAbc</a> made their first contribution in <a aria-label="Pull request #13331" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1389128446" data-permission-text="Title is private" data-url="jestjs/jest#13331" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13331/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13331">#13331</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/valentincostam/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/valentincostam">@ valentincostam</a> made their first contribution in <a aria-label="Pull request #13634" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1458596413" data-permission-text="Title is private" data-url="jestjs/jest#13634" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13634/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13634">#13634</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/unional/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/unional">@ unional</a> made their first contribution in <a aria-label="Pull request #13721" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1517018945" data-permission-text="Title is private" data-url="jestjs/jest#13721" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13721/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13721">#13721</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/andrewiggins/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/andrewiggins">@ andrewiggins</a> made their first contribution in <a aria-label="Pull request #13654" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1471979635" data-permission-text="Title is private" data-url="jestjs/jest#13654" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13654/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13654">#13654</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/michal-kocarek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/michal-kocarek">@ michal-kocarek</a> made their first contribution in <a aria-label="Pull request #13496" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1419944203" data-permission-text="Title is private" data-url="jestjs/jest#13496" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13496/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13496">#13496</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jdufresne/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/jdufresne">@ jdufresne</a> made their first contribution in <a aria-label="Pull request #13469" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1413337332" data-permission-text="Title is private" data-url="jestjs/jest#13469" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13469/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13469">#13469</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/feliperli/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/feliperli">@ feliperli</a> made their first contribution in <a aria-label="Pull request #13692" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1509760101" data-permission-text="Title is private" data-url="jestjs/jest#13692" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13692/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13692">#13692</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bob-zs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/bob-zs">@ bob-zs</a> made their first contribution in <a aria-label="Pull request #13740" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1523436837" data-permission-text="Title is private" data-url="jestjs/jest#13740" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13740/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13740">#13740</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MasterOdin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/MasterOdin">@ MasterOdin</a> made their first contribution in <a aria-label="Pull request #13743" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1524525830" data-permission-text="Title is private" data-url="jestjs/jest#13743" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13743/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13743">#13743</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kalyncoose/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/kalyncoose">@ kalyncoose</a> made their first contribution in <a aria-label="Pull request #13746" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1525575221" data-permission-text="Title is private" data-url="jestjs/jest#13746" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13746/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13746">#13746</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/arash-hacker/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/arash-hacker">@ arash-hacker</a> made their first contribution in <a aria-label="Pull request #13747" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1526515649" data-permission-text="Title is private" data-url="jestjs/jest#13747" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13747/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13747">#13747</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jomendez/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/jomendez">@ jomendez</a> made their first contribution in <a aria-label="Pull request #13741" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1523457981" data-permission-text="Title is private" data-url="jestjs/jest#13741" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13741/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13741">#13741</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/coffeebeats/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/coffeebeats">@ coffeebeats</a> made their first contribution in <a aria-label="Pull request #13770" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1533108122" data-permission-text="Title is private" data-url="jestjs/jest#13770" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13770/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13770">#13770</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lachrist/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/lachrist">@ lachrist</a> made their first contribution in <a aria-label="Pull request #13762" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1531083529" data-permission-text="Title is private" data-url="jestjs/jest#13762" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13762/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13762">#13762</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lukeed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/lukeed">@ lukeed</a> made their first contribution in <a aria-label="Pull request #13777" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1535564063" data-permission-text="Title is private" data-url="jestjs/jest#13777" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13777/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13777">#13777</a></li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://snyk.io/redirect/github/facebook/jest/compare/v29.3.1...v29.4.0"><tt>v29.3.1...v29.4.0</tt></a></p> </li> <li> <b>29.3.1</b> - <a href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.3.1">2022-11-08</a></br><h2>Fixes</h2> <ul> <li><code>[jest-config]</code> Do not warn about <code>preset</code> in <code>ProjectConfig</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13583" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13583/hovercard">#13583</a>)</li> </ul> <h2>Performance</h2> <ul> <li><code>[jest-transform]</code> Defer creation of cache directory (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13420" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13420/hovercard">#13420</a>)</li> </ul> </li> </ul> from <a href="https://snyk.io/redirect/github/facebook/jest/releases">babel-jest GitHub release notes</a> </details> <details> <summary>Package name: <b>jest</b></summary> <ul> <li> <b>29.4.0</b> - <a href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0">2023-01-24</a></br><a href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0"> Read more </a> </li> <li> <b>29.3.1</b> - <a href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.3.1">2022-11-08</a></br><h2>Fixes</h2> <ul> <li><code>[jest-config]</code> Do not warn about <code>preset</code> in <code>ProjectConfig</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13583" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13583/hovercard">#13583</a>)</li> </ul> <h2>Performance</h2> <ul> <li><code>[jest-transform]</code> Defer creation of cache directory (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13420" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13420/hovercard">#13420</a>)</li> </ul> </li> </ul> from <a href="https://snyk.io/redirect/github/facebook/jest/releases">jest GitHub release notes</a> </details> </details> <details> <summary><b>Commit messages</b></summary> </br> <details> <summary>Package name: <b>babel-jest</b></summary> <ul> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/4bc0e8acaf990e6618a7bed1dca67760c20bb12a">4bc0e8a</a> v29.4.0</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/00112db41f2fa72b2a71415ec2270b568de72957">00112db</a> chore: update changelog for release</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/a875150110b0ce35844a61c7797815c6716c1601">a875150</a> docs: roll new version</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/7626da9e5e18a61ebc3b2a3f74e7116962243ee3">7626da9</a> fix(resolve): remove faulty check for `node:` modules (#13806)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/b40429649d5e673eb5c572db8a5cfd1218320a40">b404296</a> chore: add validation of import assertions (#13805)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/6f8e91804b5515a64d1baf439bc1d84ee0ea61cd">6f8e918</a> fix: enforce import assertions when importing JSON in ESM (#12755)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/e0b12497c9953c633023a414d57ba92db0bc61ae">e0b1249</a> chore: update babel-plugin-tester (#13804)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/b9282e197294f498f9995d73d242c3e407f7a10e">b9282e1</a> chore: refresh lockfile (#13798)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/56f14544d5dc9b0e0772357b108de3da3c149ac4">56f1454</a> docs: restructure the Expect API page (#13791)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/26661e2f9873c7c0bbc0612c423840d84df168e8">26661e2</a> chore(stale-action): leave PRs with Pinned label alone</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/63bf909da19c04c300bdcbd6555598f6588a73d0">63bf909</a> docs: clean up `expect.extend` documentation (#13788)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/ea5e47e28d619828048f2dce6c015b8b77c4f6fb">ea5e47e</a> refactor(resolve): use `resolve.exports` for `imports` (#13777)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/8ef8c20dc6489da758d1f32100e70b07ff4df13d">8ef8c20</a> docs: add documentation of the `jest.deepUnmock()` method (#13774)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/c010e3597dbd021d7fe88060ecbe282fe29a8d3d">c010e35</a> refactor(@ jest/environment): keep alphabetic order in the `Jest` interface (#13773)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/9ebb37378ffe3a03c3dfa2bac9ec9ed27c6b3339">9ebb373</a> docs: fix one of `mockFn.mockImplementation()` TS examples (#13775)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/86f3c8937503d5bded0f936e671f51ec77022f2e">86f3c89</a> feat: support async createTransformer (#13762)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/2993a4f4845c0bebafb7cac95ae751615272f16c">2993a4f</a> docs: fix various grammatical errors (#13768)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/49204ac6e06ecc53d4ebf45feab4c01da7756aec">49204ac</a> fix(jest-transform): ensure correct config is passed to preprocessors specified multiple times in `transform` (#13770)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/928f6ccec5fdb92ef157d6df832444d989c6b17b">928f6cc</a> docs: add entry for isEnvironmentTornDown</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/73d7c1de78f9e48c03b770257c3e7fa962bb6a2e">73d7c1d</a> feat(jest-runtime): expose isEnvironmentTornDown variable (#13741)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/7b33879aa6b07f9d8887b2f37e302ac60d6ec7bc">7b33879</a> docs: add "shorthand for" notes in Mock Function API documentation (#13771)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/1a97aa6df02aab558319067ed3f3af1178c7419d">1a97aa6</a> chore: update resolve.exports for bug fixes</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/601ba290cd3c456c433461326df4c98dd4d07161">601ba29</a> Fix grammatical error in GlobalAPI.md (#13752)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/eca83e7221137785d585215f9ae9251adcdbacc3">eca83e7</a> Add preposition 'on' after verb 'spy' in error msgs and docs (#13767)</li> </ul> <a href="https://snyk.io/redirect/github/facebook/jest/compare/05deb8393c4ad71e19be2567b704dfd3a2ab5fc9...4bc0e8acaf990e6618a7bed1dca67760c20bb12a">Compare</a> </details> <details> <summary>Package name: <b>jest</b></summary> <ul> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/4bc0e8acaf990e6618a7bed1dca67760c20bb12a">4bc0e8a</a> v29.4.0</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/00112db41f2fa72b2a71415ec2270b568de72957">00112db</a> chore: update changelog for release</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/a875150110b0ce35844a61c7797815c6716c1601">a875150</a> docs: roll new version</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/7626da9e5e18a61ebc3b2a3f74e7116962243ee3">7626da9</a> fix(resolve): remove faulty check for `node:` modules (#13806)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/b40429649d5e673eb5c572db8a5cfd1218320a40">b404296</a> chore: add validation of import assertions (#13805)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/6f8e91804b5515a64d1baf439bc1d84ee0ea61cd">6f8e918</a> fix: enforce import assertions when importing JSON in ESM (#12755)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/e0b12497c9953c633023a414d57ba92db0bc61ae">e0b1249</a> chore: update babel-plugin-tester (#13804)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/b9282e197294f498f9995d73d242c3e407f7a10e">b9282e1</a> chore: refresh lockfile (#13798)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/56f14544d5dc9b0e0772357b108de3da3c149ac4">56f1454</a> docs: restructure the Expect API page (#13791)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/26661e2f9873c7c0bbc0612c423840d84df168e8">26661e2</a> chore(stale-action): leave PRs with Pinned label alone</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/63bf909da19c04c300bdcbd6555598f6588a73d0">63bf909</a> docs: clean up `expect.extend` documentation (#13788)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/ea5e47e28d619828048f2dce6c015b8b77c4f6fb">ea5e47e</a> refactor(resolve): use `resolve.exports` for `imports` (#13777)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/8ef8c20dc6489da758d1f32100e70b07ff4df13d">8ef8c20</a> docs: add documentation of the `jest.deepUnmock()` method (#13774)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/c010e3597dbd021d7fe88060ecbe282fe29a8d3d">c010e35</a> refactor(@ jest/environment): keep alphabetic order in the `Jest` interface (#13773)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/9ebb37378ffe3a03c3dfa2bac9ec9ed27c6b3339">9ebb373</a> docs: fix one of `mockFn.mockImplementation()` TS examples (#13775)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/86f3c8937503d5bded0f936e671f51ec77022f2e">86f3c89</a> feat: support async createTransformer (#13762)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/2993a4f4845c0bebafb7cac95ae751615272f16c">2993a4f</a> docs: fix various grammatical errors (#13768)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/49204ac6e06ecc53d4ebf45feab4c01da7756aec">49204ac</a> fix(jest-transform): ensure correct config is passed to preprocessors specified multiple times in `transform` (#13770)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/928f6ccec5fdb92ef157d6df832444d989c6b17b">928f6cc</a> docs: add entry for isEnvironmentTornDown</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/73d7c1de78f9e48c03b770257c3e7fa962bb6a2e">73d7c1d</a> feat(jest-runtime): expose isEnvironmentTornDown variable (#13741)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/7b33879aa6b07f9d8887b2f37e302ac60d6ec7bc">7b33879</a> docs: add "shorthand for" notes in Mock Function API documentation (#13771)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/1a97aa6df02aab558319067ed3f3af1178c7419d">1a97aa6</a> chore: update resolve.exports for bug fixes</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/601ba290cd3c456c433461326df4c98dd4d07161">601ba29</a> Fix grammatical error in GlobalAPI.md (#13752)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/eca83e7221137785d585215f9ae9251adcdbacc3">eca83e7</a> Add preposition 'on' after verb 'spy' in error msgs and docs (#13767)</li> </ul> <a href="https://snyk.io/redirect/github/facebook/jest/compare/05deb8393c4ad71e19be2567b704dfd3a2ab5fc9...4bc0e8acaf990e6618a7bed1dca67760c20bb12a">Compare</a> </details> </details> <hr/> **Note:** *You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.* For more information: <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJkM2ZlYTczOC1kMDZkLTRmMTYtYjc5MS03ODdiZWIxYjI4ZTkiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImQzZmVhNzM4LWQwNmQtNGYxNi1iNzkxLTc4N2JlYjFiMjhlOSJ9fQ==" width="0" height="0"/> 🧐 [View latest project report](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55?utm_source=github&utm_medium=referral&page=upgrade-pr) 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55/settings/integration?utm_source=github&utm_medium=referral&page=upgrade-pr) 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55/settings/integration?pkg=babel-jest&pkg=jest&utm_source=github&utm_medium=referral&page=upgrade-pr#auto-dep-upgrades) <!--- (snyk:metadata:{"prId":"d3fea738-d06d-4f16-b791-787beb1b28e9","prPublicId":"d3fea738-d06d-4f16-b791-787beb1b28e9","dependencies":[{"name":"babel-jest","from":"29.3.1","to":"29.4.0"},{"name":"jest","from":"29.3.1","to":"29.4.0"}],"packageManager":"npm","type":"auto","projectUrl":"https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55?utm_source=github&utm_medium=referral&page=upgrade-pr","projectPublicId":"852e6e4f-be96-45c8-b370-1060f5ebee55","env":"prod","prType":"upgrade","vulns":[],"issuesToFix":[],"upgrade":[],"upgradeInfo":{"versionsDiff":1,"publishedDate":"2023-01-24T10:56:00.839Z"},"templateVariants":[],"hasFixes":false,"isMajorUpgrade":false,"isBreakingChange":false,"priorityScoreList":[]}) ---> --------- Co-authored-by: snyk-bot <[email protected]>
<h3>Snyk has created this PR to upgrade multiple dependencies.</h3> 👯 The following dependencies are linked and will therefore be updated together. </br></br> :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project. </br></br> Name | Versions | Released on :-------------|:-------------|:------------- **babel-jest**</br>from 29.3.1 to 29.4.0 | **1 version** ahead of your current version | **22 days ago**</br>on 2023-01-24 **jest**</br>from 29.3.1 to 29.4.0 | **1 version** ahead of your current version | **22 days ago**</br>on 2023-01-24 <details> <summary><b>Release notes</b></summary> <br/> <details> <summary>Package name: <b>babel-jest</b></summary> <ul> <li> <b>29.4.0</b> - <a href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0">2023-01-24</a></br><h2>Features</h2> <ul> <li><code>[expect, @ jest/expect-utils]</code> Support custom equality testers (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13654" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13654/hovercard">#13654</a>)</li> <li><code>[jest-config, jest-worker]</code> Use <code>os.availableParallelism</code> if available to calculate number of workers to spawn (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13738" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13738/hovercard">#13738</a>)</li> <li><code>[@ jest/globals, jest-mock]</code> Add <code>jest.replaceProperty()</code> that replaces property value (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13496" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13496/hovercard">#13496</a>)</li> <li><code>[jest-haste-map]</code> ignore Sapling vcs directories (<code>.sl/</code>) (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13674" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13674/hovercard">#13674</a>)</li> <li><code>[jest-resolve]</code> Support subpath imports (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13705" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13705/hovercard">#13705</a>, <a href="https://snyk.io/redirect/github/facebook/jest/pull/13723" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13723/hovercard">#13723</a>, <a href="https://snyk.io/redirect/github/facebook/jest/pull/13777" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13777/hovercard">#13777</a>)</li> <li><code>[jest-runtime]</code> Add <code>jest.isolateModulesAsync</code> for scoped module initialization of asynchronous functions (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13680" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13680/hovercard">#13680</a>)</li> <li><code>[jest-runtime]</code> Add <code>jest.isEnvironmentTornDown</code> function (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13741" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13741/hovercard">#13741</a>)</li> <li><code>[jest-test-result]</code> Added <code>skipped</code> and <code>focused</code> status to <code>FormattedTestResult</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13700" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13700/hovercard">#13700</a>)</li> <li><code>[jest-transform]</code> Support for asynchronous <code>createTransformer</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13762" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13762/hovercard">#13762</a>)</li> </ul> <h2>Fixes</h2> <ul> <li><code>[jest-environment-node]</code> Fix non-configurable globals (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13687" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13687/hovercard">#13687</a>)</li> <li><code>[@ jest/expect-utils]</code> <code>toMatchObject</code> should handle <code>Symbol</code> properties (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13639" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13639/hovercard">#13639</a>)</li> <li><code>[jest-mock]</code> Fix <code>mockReset</code> and <code>resetAllMocks</code> <code>undefined</code> return value(<a href="https://snyk.io/redirect/github/facebook/jest/pull/13692" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13692/hovercard">#13692</a>)</li> <li><code>[jest-resolve]</code> Add global paths to <code>require.resolve.paths</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13633" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13633/hovercard">#13633</a>)</li> <li><code>[jest-resolve]</code> Correct node core module detection when using <code>node:</code> specifiers (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13806" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13806/hovercard">#13806</a>)</li> <li><code>[jest-runtime]</code> Support WASM files that import JS resources (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13608" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13608/hovercard">#13608</a>)</li> <li><code>[jest-runtime]</code> Use the <code>scriptTransformer</code> cache in <code>jest-runner</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13735" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13735/hovercard">#13735</a>)</li> <li><code>[jest-runtime]</code> Enforce import assertions when importing JSON in ESM (<a href="https://snyk.io/redirect/github/facebook/jest/pull/12755" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/12755/hovercard">#12755</a> & <a href="https://snyk.io/redirect/github/facebook/jest/pull/13805" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13805/hovercard">#13805</a>)</li> <li><code>[jest-snapshot]</code> Make sure to import <code>babel</code> outside of the sandbox (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13694" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13694/hovercard">#13694</a>)</li> <li><code>[jest-transform]</code> Ensure the correct configuration is passed to preprocessors specified multiple times in the <code>transform</code> option (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13770" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13770/hovercard">#13770</a>)</li> </ul> <h2>Chore & Maintenance</h2> <ul> <li><code>[@ jest/fake-timers]</code> Update <code>@ sinonjs/fake-timers</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13612" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13612/hovercard">#13612</a>)</li> <li><code>[docs]</code> Improve custom puppeteer example to prevent worker warnings (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13619" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13619/hovercard">#13619</a>)</li> </ul> <h2>New Contributors</h2> <ul> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lvqq/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/lvqq">@ lvqq</a> made their first contribution in <a aria-label="Pull request #13633" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1458233845" data-permission-text="Title is private" data-url="jestjs/jest#13633" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13633/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13633">#13633</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/zjfresh/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/zjfresh">@ zjfresh</a> made their first contribution in <a aria-label="Pull request #13682" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1504316630" data-permission-text="Title is private" data-url="jestjs/jest#13682" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13682/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13682">#13682</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/rnwst/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/rnwst">@ rnwst</a> made their first contribution in <a aria-label="Pull request #13635" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1460619742" data-permission-text="Title is private" data-url="jestjs/jest#13635" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13635/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13635">#13635</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/overlookmotel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/overlookmotel">@ overlookmotel</a> made their first contribution in <a aria-label="Pull request #13687" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1507865711" data-permission-text="Title is private" data-url="jestjs/jest#13687" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13687/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13687">#13687</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mmanciop/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/mmanciop">@ mmanciop</a> made their first contribution in <a aria-label="Pull request #13680" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1500954532" data-permission-text="Title is private" data-url="jestjs/jest#13680" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13680/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13680">#13680</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Jeroendevr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/Jeroendevr">@ Jeroendevr</a> made their first contribution in <a aria-label="Pull request #13428" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1404420168" data-permission-text="Title is private" data-url="jestjs/jest#13428" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13428/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13428">#13428</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/falsyvalues/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/falsyvalues">@ falsyvalues</a> made their first contribution in <a aria-label="Pull request #13619" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1453483771" data-permission-text="Title is private" data-url="jestjs/jest#13619" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13619/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13619">#13619</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/vegerot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/vegerot">@ vegerot</a> made their first contribution in <a aria-label="Pull request #13674" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1495407600" data-permission-text="Title is private" data-url="jestjs/jest#13674" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13674/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13674">#13674</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/faustAbc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/faustAbc">@ faustAbc</a> made their first contribution in <a aria-label="Pull request #13331" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1389128446" data-permission-text="Title is private" data-url="jestjs/jest#13331" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13331/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13331">#13331</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/valentincostam/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/valentincostam">@ valentincostam</a> made their first contribution in <a aria-label="Pull request #13634" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1458596413" data-permission-text="Title is private" data-url="jestjs/jest#13634" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13634/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13634">#13634</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/unional/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/unional">@ unional</a> made their first contribution in <a aria-label="Pull request #13721" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1517018945" data-permission-text="Title is private" data-url="jestjs/jest#13721" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13721/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13721">#13721</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/andrewiggins/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/andrewiggins">@ andrewiggins</a> made their first contribution in <a aria-label="Pull request #13654" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1471979635" data-permission-text="Title is private" data-url="jestjs/jest#13654" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13654/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13654">#13654</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/michal-kocarek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/michal-kocarek">@ michal-kocarek</a> made their first contribution in <a aria-label="Pull request #13496" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1419944203" data-permission-text="Title is private" data-url="jestjs/jest#13496" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13496/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13496">#13496</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jdufresne/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/jdufresne">@ jdufresne</a> made their first contribution in <a aria-label="Pull request #13469" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1413337332" data-permission-text="Title is private" data-url="jestjs/jest#13469" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13469/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13469">#13469</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/feliperli/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/feliperli">@ feliperli</a> made their first contribution in <a aria-label="Pull request #13692" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1509760101" data-permission-text="Title is private" data-url="jestjs/jest#13692" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13692/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13692">#13692</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/bob-zs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/bob-zs">@ bob-zs</a> made their first contribution in <a aria-label="Pull request #13740" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1523436837" data-permission-text="Title is private" data-url="jestjs/jest#13740" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13740/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13740">#13740</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/MasterOdin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/MasterOdin">@ MasterOdin</a> made their first contribution in <a aria-label="Pull request #13743" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1524525830" data-permission-text="Title is private" data-url="jestjs/jest#13743" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13743/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13743">#13743</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/kalyncoose/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/kalyncoose">@ kalyncoose</a> made their first contribution in <a aria-label="Pull request #13746" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1525575221" data-permission-text="Title is private" data-url="jestjs/jest#13746" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13746/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13746">#13746</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/arash-hacker/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/arash-hacker">@ arash-hacker</a> made their first contribution in <a aria-label="Pull request #13747" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1526515649" data-permission-text="Title is private" data-url="jestjs/jest#13747" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13747/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13747">#13747</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jomendez/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/jomendez">@ jomendez</a> made their first contribution in <a aria-label="Pull request #13741" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1523457981" data-permission-text="Title is private" data-url="jestjs/jest#13741" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13741/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13741">#13741</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/coffeebeats/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/coffeebeats">@ coffeebeats</a> made their first contribution in <a aria-label="Pull request #13770" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1533108122" data-permission-text="Title is private" data-url="jestjs/jest#13770" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13770/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13770">#13770</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lachrist/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/lachrist">@ lachrist</a> made their first contribution in <a aria-label="Pull request #13762" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1531083529" data-permission-text="Title is private" data-url="jestjs/jest#13762" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13762/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13762">#13762</a></li> <li><a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/lukeed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/lukeed">@ lukeed</a> made their first contribution in <a aria-label="Pull request #13777" class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1535564063" data-permission-text="Title is private" data-url="jestjs/jest#13777" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13777/hovercard" href="https://snyk.io/redirect/github/facebook/jest/pull/13777">#13777</a></li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://snyk.io/redirect/github/facebook/jest/compare/v29.3.1...v29.4.0"><tt>v29.3.1...v29.4.0</tt></a></p> </li> <li> <b>29.3.1</b> - <a href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.3.1">2022-11-08</a></br><h2>Fixes</h2> <ul> <li><code>[jest-config]</code> Do not warn about <code>preset</code> in <code>ProjectConfig</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13583" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13583/hovercard">#13583</a>)</li> </ul> <h2>Performance</h2> <ul> <li><code>[jest-transform]</code> Defer creation of cache directory (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13420" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13420/hovercard">#13420</a>)</li> </ul> </li> </ul> from <a href="https://snyk.io/redirect/github/facebook/jest/releases">babel-jest GitHub release notes</a> </details> <details> <summary>Package name: <b>jest</b></summary> <ul> <li> <b>29.4.0</b> - <a href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0">2023-01-24</a></br><a href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.4.0"> Read more </a> </li> <li> <b>29.3.1</b> - <a href="https://snyk.io/redirect/github/facebook/jest/releases/tag/v29.3.1">2022-11-08</a></br><h2>Fixes</h2> <ul> <li><code>[jest-config]</code> Do not warn about <code>preset</code> in <code>ProjectConfig</code> (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13583" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13583/hovercard">#13583</a>)</li> </ul> <h2>Performance</h2> <ul> <li><code>[jest-transform]</code> Defer creation of cache directory (<a href="https://snyk.io/redirect/github/facebook/jest/pull/13420" data-hovercard-type="pull_request" data-hovercard-url="/jestjs/jest/pull/13420/hovercard">#13420</a>)</li> </ul> </li> </ul> from <a href="https://snyk.io/redirect/github/facebook/jest/releases">jest GitHub release notes</a> </details> </details> <details> <summary><b>Commit messages</b></summary> </br> <details> <summary>Package name: <b>babel-jest</b></summary> <ul> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/4bc0e8acaf990e6618a7bed1dca67760c20bb12a">4bc0e8a</a> v29.4.0</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/00112db41f2fa72b2a71415ec2270b568de72957">00112db</a> chore: update changelog for release</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/a875150110b0ce35844a61c7797815c6716c1601">a875150</a> docs: roll new version</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/7626da9e5e18a61ebc3b2a3f74e7116962243ee3">7626da9</a> fix(resolve): remove faulty check for `node:` modules (#13806)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/b40429649d5e673eb5c572db8a5cfd1218320a40">b404296</a> chore: add validation of import assertions (#13805)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/6f8e91804b5515a64d1baf439bc1d84ee0ea61cd">6f8e918</a> fix: enforce import assertions when importing JSON in ESM (#12755)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/e0b12497c9953c633023a414d57ba92db0bc61ae">e0b1249</a> chore: update babel-plugin-tester (#13804)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/b9282e197294f498f9995d73d242c3e407f7a10e">b9282e1</a> chore: refresh lockfile (#13798)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/56f14544d5dc9b0e0772357b108de3da3c149ac4">56f1454</a> docs: restructure the Expect API page (#13791)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/26661e2f9873c7c0bbc0612c423840d84df168e8">26661e2</a> chore(stale-action): leave PRs with Pinned label alone</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/63bf909da19c04c300bdcbd6555598f6588a73d0">63bf909</a> docs: clean up `expect.extend` documentation (#13788)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/ea5e47e28d619828048f2dce6c015b8b77c4f6fb">ea5e47e</a> refactor(resolve): use `resolve.exports` for `imports` (#13777)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/8ef8c20dc6489da758d1f32100e70b07ff4df13d">8ef8c20</a> docs: add documentation of the `jest.deepUnmock()` method (#13774)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/c010e3597dbd021d7fe88060ecbe282fe29a8d3d">c010e35</a> refactor(@ jest/environment): keep alphabetic order in the `Jest` interface (#13773)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/9ebb37378ffe3a03c3dfa2bac9ec9ed27c6b3339">9ebb373</a> docs: fix one of `mockFn.mockImplementation()` TS examples (#13775)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/86f3c8937503d5bded0f936e671f51ec77022f2e">86f3c89</a> feat: support async createTransformer (#13762)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/2993a4f4845c0bebafb7cac95ae751615272f16c">2993a4f</a> docs: fix various grammatical errors (#13768)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/49204ac6e06ecc53d4ebf45feab4c01da7756aec">49204ac</a> fix(jest-transform): ensure correct config is passed to preprocessors specified multiple times in `transform` (#13770)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/928f6ccec5fdb92ef157d6df832444d989c6b17b">928f6cc</a> docs: add entry for isEnvironmentTornDown</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/73d7c1de78f9e48c03b770257c3e7fa962bb6a2e">73d7c1d</a> feat(jest-runtime): expose isEnvironmentTornDown variable (#13741)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/7b33879aa6b07f9d8887b2f37e302ac60d6ec7bc">7b33879</a> docs: add "shorthand for" notes in Mock Function API documentation (#13771)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/1a97aa6df02aab558319067ed3f3af1178c7419d">1a97aa6</a> chore: update resolve.exports for bug fixes</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/601ba290cd3c456c433461326df4c98dd4d07161">601ba29</a> Fix grammatical error in GlobalAPI.md (#13752)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/eca83e7221137785d585215f9ae9251adcdbacc3">eca83e7</a> Add preposition 'on' after verb 'spy' in error msgs and docs (#13767)</li> </ul> <a href="https://snyk.io/redirect/github/facebook/jest/compare/05deb8393c4ad71e19be2567b704dfd3a2ab5fc9...4bc0e8acaf990e6618a7bed1dca67760c20bb12a">Compare</a> </details> <details> <summary>Package name: <b>jest</b></summary> <ul> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/4bc0e8acaf990e6618a7bed1dca67760c20bb12a">4bc0e8a</a> v29.4.0</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/00112db41f2fa72b2a71415ec2270b568de72957">00112db</a> chore: update changelog for release</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/a875150110b0ce35844a61c7797815c6716c1601">a875150</a> docs: roll new version</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/7626da9e5e18a61ebc3b2a3f74e7116962243ee3">7626da9</a> fix(resolve): remove faulty check for `node:` modules (#13806)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/b40429649d5e673eb5c572db8a5cfd1218320a40">b404296</a> chore: add validation of import assertions (#13805)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/6f8e91804b5515a64d1baf439bc1d84ee0ea61cd">6f8e918</a> fix: enforce import assertions when importing JSON in ESM (#12755)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/e0b12497c9953c633023a414d57ba92db0bc61ae">e0b1249</a> chore: update babel-plugin-tester (#13804)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/b9282e197294f498f9995d73d242c3e407f7a10e">b9282e1</a> chore: refresh lockfile (#13798)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/56f14544d5dc9b0e0772357b108de3da3c149ac4">56f1454</a> docs: restructure the Expect API page (#13791)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/26661e2f9873c7c0bbc0612c423840d84df168e8">26661e2</a> chore(stale-action): leave PRs with Pinned label alone</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/63bf909da19c04c300bdcbd6555598f6588a73d0">63bf909</a> docs: clean up `expect.extend` documentation (#13788)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/ea5e47e28d619828048f2dce6c015b8b77c4f6fb">ea5e47e</a> refactor(resolve): use `resolve.exports` for `imports` (#13777)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/8ef8c20dc6489da758d1f32100e70b07ff4df13d">8ef8c20</a> docs: add documentation of the `jest.deepUnmock()` method (#13774)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/c010e3597dbd021d7fe88060ecbe282fe29a8d3d">c010e35</a> refactor(@ jest/environment): keep alphabetic order in the `Jest` interface (#13773)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/9ebb37378ffe3a03c3dfa2bac9ec9ed27c6b3339">9ebb373</a> docs: fix one of `mockFn.mockImplementation()` TS examples (#13775)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/86f3c8937503d5bded0f936e671f51ec77022f2e">86f3c89</a> feat: support async createTransformer (#13762)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/2993a4f4845c0bebafb7cac95ae751615272f16c">2993a4f</a> docs: fix various grammatical errors (#13768)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/49204ac6e06ecc53d4ebf45feab4c01da7756aec">49204ac</a> fix(jest-transform): ensure correct config is passed to preprocessors specified multiple times in `transform` (#13770)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/928f6ccec5fdb92ef157d6df832444d989c6b17b">928f6cc</a> docs: add entry for isEnvironmentTornDown</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/73d7c1de78f9e48c03b770257c3e7fa962bb6a2e">73d7c1d</a> feat(jest-runtime): expose isEnvironmentTornDown variable (#13741)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/7b33879aa6b07f9d8887b2f37e302ac60d6ec7bc">7b33879</a> docs: add "shorthand for" notes in Mock Function API documentation (#13771)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/1a97aa6df02aab558319067ed3f3af1178c7419d">1a97aa6</a> chore: update resolve.exports for bug fixes</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/601ba290cd3c456c433461326df4c98dd4d07161">601ba29</a> Fix grammatical error in GlobalAPI.md (#13752)</li> <li><a href="https://snyk.io/redirect/github/facebook/jest/commit/eca83e7221137785d585215f9ae9251adcdbacc3">eca83e7</a> Add preposition 'on' after verb 'spy' in error msgs and docs (#13767)</li> </ul> <a href="https://snyk.io/redirect/github/facebook/jest/compare/05deb8393c4ad71e19be2567b704dfd3a2ab5fc9...4bc0e8acaf990e6618a7bed1dca67760c20bb12a">Compare</a> </details> </details> <hr/> **Note:** *You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.* For more information: <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJkM2ZlYTczOC1kMDZkLTRmMTYtYjc5MS03ODdiZWIxYjI4ZTkiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImQzZmVhNzM4LWQwNmQtNGYxNi1iNzkxLTc4N2JlYjFiMjhlOSJ9fQ==" width="0" height="0"/> 🧐 [View latest project report](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55?utm_source=github&utm_medium=referral&page=upgrade-pr) 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55/settings/integration?utm_source=github&utm_medium=referral&page=upgrade-pr) 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55/settings/integration?pkg=babel-jest&pkg=jest&utm_source=github&utm_medium=referral&page=upgrade-pr#auto-dep-upgrades) <!--- (snyk:metadata:{"prId":"d3fea738-d06d-4f16-b791-787beb1b28e9","prPublicId":"d3fea738-d06d-4f16-b791-787beb1b28e9","dependencies":[{"name":"babel-jest","from":"29.3.1","to":"29.4.0"},{"name":"jest","from":"29.3.1","to":"29.4.0"}],"packageManager":"npm","type":"auto","projectUrl":"https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55?utm_source=github&utm_medium=referral&page=upgrade-pr","projectPublicId":"852e6e4f-be96-45c8-b370-1060f5ebee55","env":"prod","prType":"upgrade","vulns":[],"issuesToFix":[],"upgrade":[],"upgradeInfo":{"versionsDiff":1,"publishedDate":"2023-01-24T10:56:00.839Z"},"templateVariants":[],"hasFixes":false,"isMajorUpgrade":false,"isBreakingChange":false,"priorityScoreList":[]}) ---> --------- Co-authored-by: snyk-bot <[email protected]>
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
Hello! 👋
This PR adds support for custom equality testers to address RFC #12880. Every so often, issues and comments are filed to extend
toEqual
abilities to determine if two types are equal (#12880, #7352, #2547 (comment), #10392). A frequently provided workaround is to write a custom matcher usingexpect.extend
. For some use cases this may suffice, but it falls short it two ways:toMatchObject
, or a function argument intoHaveBeenCalledWith
).This PR addresses these asks and resolve those issues by exposing a new
addEqualityTesters
method onexpect
. This method accepts an array of custom equality testers that are used by all built-in expect matchers when performing deep equality. The built-in equality testers in@jest/expect-utils
also take into account these custom equality testers when performing their equality tests. Further, some matchers do deep equality checks to recommend other matchers that the user may have intended to use (e.g.toBe
->toEqual
). These code paths also take into account new custom equality testers.I went with a property getter/setter as the initial proposal because it allows for more granular control of the custom equality testers on a perdescribe
block basis, as demonstrated in thecustomEqualityTesters.test.ts
file. Though perhaps that is unnecessary and per-file or environment equality testers would suffice and we could go with an API likeexpect.extendEqualityTesters([])
.Assuming the general approach of this PR is acceptable some remaining TODOs:
expect.extend()
tests which live in packages/expect/typetests/expect.test.tsTest plan
I've added a new test file to assert new functionality works for all relevant matchers. Current test suite also passes locally without changes to ensure existing behavior is preserved.