This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the testing category.
Last Updated: 2024-11-23
I was using some code that mocked the first call of a method and then called
the real thing on subsequent calls. I did this to give a fixed value to Date.now
.
jest.spyOn(Date, "now").mockImplementationOnce(() => new Date("2019-09-1"))
Later on, I found that these tests were failing. This was because there were now
multiple calls to Date.now
in the underlying code and they were giving
different answers. My single mock response had been used up and the real date
was showing elsewhere.
Be careful with mockImplementationOnce
. It seems like a good idea for surgical
mocking. But in reality, it causes brittle tests as the stack gets larger and
you accidentally introduce more code that calls the same function.