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.
