How to Change Jest Mock Function Return Value in Each Test?
When writing tests with Jest, you may come across situations where you need to change the return value of a mock function for each individual test. This can be useful when you want to simulate different scenarios or test different branches of your code. In this blog post, we will explore multiple solutions to achieve this.
Solution 1: Using jest.fn() and mockReturnValueOnce()
Jest provides the jest.fn()
function to create mock functions. To change the return value of a mock function for each test, you can use the mockReturnValueOnce()
method. This method allows you to specify the return value for the next call to the mock function.
Here’s an example:
// Mock function
const mockFunction = jest.fn();
// Test 1
mockFunction.mockReturnValueOnce('Test 1');
console.log(mockFunction()); // Output: 'Test 1'
// Test 2
mockFunction.mockReturnValueOnce('Test 2');
console.log(mockFunction()); // Output: 'Test 2'
In the above example, we create a mock function using jest.fn()
. In each test, we use mockReturnValueOnce()
to set the return value for the next call to the mock function. The first call returns ‘Test 1’ and the second call returns ‘Test 2’.
Solution 2: Using jest.spyOn() and mockImplementation()
Another approach is to use jest.spyOn()
to create a spy function and then use mockImplementation()
to define the implementation of the spy function. This allows you to change the return value for each test.
Here’s an example:
// Object with a method to mock
const obj = {
method: () => 'Default value',
};
// Test 1
const spy = jest.spyOn(obj, 'method').mockImplementation(() => 'Test 1');
console.log(obj.method()); // Output: 'Test 1'
// Test 2
spy.mockImplementation(() => 'Test 2');
console.log(obj.method()); // Output: 'Test 2'
In the above example, we create an object with a method to mock. We use jest.spyOn()
to create a spy function for the method. Then, we use mockImplementation()
to define the implementation of the spy function. In each test, we change the implementation to return a different value.
These are two common solutions to change the return value of a mock function in each test using Jest. Choose the one that suits your needs and helps you write effective tests.
Happy testing!
Leave a Reply