Recall that using jest.mock(module) mocks every function exported from the module.
But sometimes we need to mock only one or some functions in a module, leaving the others’ real implementations as-is.
Suppose we are using the following module of functions:
my-functions.js:
const f = () => 'Return from f' const g = () => 'Return from g' const h = () => 'Return from h' module.exports = { f, g, h }
The code below uses a Jest spy with a mock implementation to mock out just one function while leaving alone the original implementations of the other two.
my-functions.test.js:
const functions = require('./my-functions') describe('mock only one function from module', () => { it('should return only one mocked result', () => { jest.spyOn(functions, 'g') .mockImplementation(() => '_mock_') console.log(functions.f()) console.log(functions.g()) console.log(functions.h()) expect(functions.f()).toEqual('Return from f') expect(functions.g()).toEqual('_mock_') expect(functions.h()).toEqual('Return from h') }) })
Running the tests:
$ jest my-functions.test.js PASS ./my-functions.test.js mock only one function from module ✓ should return only one mocked result (14ms) console.log my-functions.test.js:8 Return from f console.log my-functions.test.js:9 _mock_ console.log my-functions.test.js:10 Return from h Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 0.956s Ran all test suites matching /my-functions.test.js/i.
Note that only g() returns a mocked string.