Let's imagine to functions, a
and b
.
function a() {
return 5;
}
function b() {
return a() + 5;
}
module.exports = { a, b };
To properly test b
, I want to mock a
. To do this, I try jest.mock
:
const { a, b } = require("./myFunctions");
jest.mock("./myFunctions", () => ({
...jest.requireActual("./myFunctions"),
a: jest.fn(() => 10),
}));
describe("myFunctions", () => {
it("mocks a", () => {
expect(a()).toEqual(10);
});
it("mock affects b", () => {
expect(b()).toEqual(15);
});
});
The first test succeeds: a
returns 10 instead of 5 as expected. However, the latter test fails because when b
calls a
, it still returns 5.
How do I mock a
so that it's effective in b
calls?