-
-
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
[Possible regression] jest.setTimeout not honored #11500
Comments
Hello! I am currently having the same problem. I tried using I had to downgrade jest and babel-jest for now. I downgraded jest to 26.6.3 and babel-jest to 25.5.1. Any version after that broke my tests. Thank you! |
I believe it('mocks setTimeout correctly', () => {
jest.useFakeTimers()
setTimeout(() => {}, 1000)
expect(setTimeout).toHaveBeenCalled()
}) gives
|
I'm seeing the same thing with The new default "modern" timer mocking works as expected. However asserting Reverting to the legacy timer mocks works ok, e.g. it('mocks setTimeout correctly', () => {
jest.useFakeTimers('legacy')
setTimeout(() => {}, 1000)
expect(setTimeout).toHaveBeenCalled()
}) |
I think its due to fact that modern timers use sinon fake timers and jest does not see it as proper mock where legacy timers were created by jest, but not sure if that is the case |
* Bump jest from 26.6.3 to 27.0.3 Bumps [jest](https://github.com/facebook/jest) from 26.6.3 to 27.0.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) - [Commits](jestjs/jest@v26.6.3...v27.0.3) Signed-off-by: dependabot[bot] <support@github.com> * Move `jest.setTimeout()` to top level to fix possible regression See jestjs/jest#11500 Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dominik Schilling <dominikschilling+git@gmail.com>
@Smrtnyk That fits with what I'm seeing. If modern timers are not going to conform to the mock signature then the documentation should be updated to reflect it. The Timer Mocks documentation for v26 recommends using the failing approach. |
Since this issue is labeled "needs repro", I'm going to point to a related issue with a repro: |
* test: move `jest.setTimeout` to top of the file ref. jestjs/jest#11500 * chore: extend timeout to 30 sec
We saw this as well with jest.setTimeout for our tests when migrating from 26 -> 27. We had only one particularly long running test and so we were calling that function within the test body to increase the timeout default. (As the CLI suggests!) We have migrated to passing the timeout argument to the test directly as the trailing argument as well as the afterEach and it appears to have resolved the issue. |
Hello, everyone. I moved
|
looks like if you use sinon-fake-timers directly, it somehow collides with jest.setTimeout and the tests are failing. |
I have the same issue, is there any plan to fix that? |
Just ran into this and it's now holding up an upgrade for us too. |
I'm having the same issue with |
@ceoworks Migrate to the timeout at the |
I'm having this issue currently. Have you been able to solve it without having to downgrade? |
Got the same issue updating from |
Maybe try Sinon? |
So I'm following this tutorial (sinon implementation @11:00) and still got issues.
Although I'm testing a rest api endpoint that finds an item by id (findById). Do you have any idea of how to go about it? Tried every supposed solution. |
* test: move `jest.setTimeout` to top of the file ref. jestjs/jest#11500 * chore: extend timeout to 30 sec
* test: move `jest.setTimeout` to top of the file ref. jestjs/jest#11500 * chore: extend timeout to 30 sec
* test: move `jest.setTimeout` to top of the file ref. jestjs/jest#11500 * chore: extend timeout to 30 sec
Any solution for this? Im using jest at 29.0.2 version and facing the same issue. Even using jest.setTimeout or passing testTimeout in jest.config.js, nothing solves it. |
Are you using custom global error handlers? For me, I had to do away with my global error handlers in the app.js file. |
Not really, im just creating it and receiving these error. |
Could you share the hosted link? |
As of jest 29 legacy timers no longer seem to work. Did I miss that in the release notes?
|
The API has changed since Jest 28. See Upgrade Guide: https://jestjs.io/docs/28.x/upgrading-to-jest28#fake-timers |
So adding a separate spy to the non-legacy fake timer seems to work:
|
Yep. Just as documented here: https://jestjs.io/docs/timer-mocks |
This issue is stale because it has been open for 1 year with no activity. Remove stale label or comment or this will be closed in 30 days. |
This issue was closed because it has been stalled for 30 days with no activity. Please open a new issue if the issue is still relevant, linking to this one. |
Feels like a rather large bug which will negatively affect people who use Jest for testing UI where tests can easily exceed 5 seconds. |
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
After updating to
^27.0.3
this morning, a bunch of previously working tests started to fail, with error messages below:I did have
jest.setTimeout(300000)
in place and it was working fine before, hence I'm doubting there might be a regression issue here.As a side note, after adding a global timeout in the jest config the problems went away, hence it's most likely a
jest.setTimeout
regression, might worth looking into.The text was updated successfully, but these errors were encountered: