Open kevinyou opened 1 year ago
This is starting to get a bit exotic ... Think you could get away with simply faking the required exports yourself?
Yes, as a workaround I did that (in Jest) and it works:
jest.mock('perf_hooks', () => ({
performance: {
now: () => global.performance.now(),
},
}));
But as a user, it was very confusing until I dug deep to the fake-timers source code. The documentation talks about overriding performance.now()
but whether this applies to the one in perf_hooks
was unclear. Also, it wasn't until Node v16 that performance
became a global so older libraries still access it through perf_hooks
.
Maybe the documentation could have a disclaimer about performance
in perf_hooks
, like in the config.toFake
row notes.
I think it's probably fine to support it and not a lot of work?
I'm happy to make changes in Node if that'd help
@benjamingr I am at a bit of a loss as to how to do this cleanly with just using this library, so if you have a way of doing this cleanly by exposing something in Node, then by all means feel free ❤️
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
What did you expect to happen? After calling
useFakeTimers()
,perf_hooks.performance.now()
should return a fake time, just like howperformance.now()
does.What actually happens 1.
perf_hooks.performance.now()
is not the same asperformance.now()
. The latter is correctly hijacked and returns a fake time. 2.perf_hooks.performance.now()
returns a negative value -- undefined behavior?How to reproduce https://github.com/kevinyou/wtf-performance-now-mocking/tree/main/sinon-fake-timers