sinonjs / sinon

Test spies, stubs and mocks for JavaScript.
https://sinonjs.org/
Other
9.67k stars 769 forks source link

No useRealTimers() or runAllTimers() ? #2548

Closed GeoffreyPlitt closed 1 year ago

GeoffreyPlitt commented 1 year ago

I noticed that Sinon's useFakeTimers seems to mirror Jest's almost identically: https://jestjs.io/docs/timer-mocks. However, Sinon doesn't seem to have Jest's useRealTimers() or runAllTimers().

I'm working on a test suite that was already using useFakeTimers, but now has some hanging/deadlocks that only happen when we use fake timers (using real timers, it all succeeds, but takes longer). I wanted to use runAllTimers() to see if it helps.

Any reason Sinon has most of the same functionality as Jest's, but no useRealTimers() or runAllTimers()?

fatso83 commented 1 year ago

Jest uses @sinonjs/fake-timers under the hood, basically just adding a facade. Just have a peek at the Jest source code to see what fake-timers methods it is calling (I have committed to Jest before, so I know it's very quick to dig into - you can search the code using the Github search interface)

AFAIK, from the link you posted, useRealTimers uninstalls the fake timers. Thus not using any timers. So ... just uninstall the timers? If using fake-timers, just do clock.uninstall();. Pretty sure it's just the instance from fake-timers we return, so you can do the same.

runAllTimers sounds like clock.runAll() or clock.runToLast().