How to Mock an Exported Const in Jest
When writing unit tests for JavaScript code using Jest, there may be scenarios where you need to mock an exported constant. Mocking allows you to replace the actual implementation of a function, object, or constant with a custom implementation for testing purposes. In this blog post, we will explore different methods to mock an exported const in Jest.
Method 1: Using Jest’s jest.mock
function
Jest provides a built-in function called jest.mock
that allows you to mock any module or constant. To mock an exported const, you can use the jest.mock
function along with the moduleName
parameter set to the path of the module containing the constant you want to mock. Here’s an example:
// moduleToMock.js
export const myConstant = 'Original Value';
// test.js
import { myConstant } from './moduleToMock';
jest.mock('./moduleToMock', () => ({
myConstant: 'Mocked Value',
}));
test('should mock the exported constant', () => {
expect(myConstant).toBe('Mocked Value');
});
In the above example, we import the myConstant
from the moduleToMock
module and use jest.mock
to mock the constant with a custom value. The test then verifies that the constant has been successfully mocked.
Method 2: Using ES6 Proxy
If you prefer a more dynamic approach, you can use ES6 Proxy to mock the exported constant. Here’s an example:
// moduleToMock.js
export const myConstant = 'Original Value';
// test.js
import { myConstant } from './moduleToMock';
const mockMyConstant = new Proxy(myConstant, {
get: () => 'Mocked Value',
});
test('should mock the exported constant using ES6 Proxy', () => {
expect(mockMyConstant).toBe('Mocked Value');
});
In the above example, we create a new Proxy object called mockMyConstant
that intercepts the get
operation and returns the mocked value. By using this approach, we can dynamically mock the constant without modifying the original module.
Method 3: Using a Mock Module
If you prefer to keep your test code separate from your production code, you can create a separate mock module to mock the exported constant. Here’s an example:
// moduleToMock.js
export const myConstant = 'Original Value';
// __mocks__/moduleToMock.js
export const myConstant = 'Mocked Value';
// test.js
import { myConstant } from './moduleToMock';
jest.mock('./moduleToMock');
test('should mock the exported constant using a mock module', () => {
expect(myConstant).toBe('Mocked Value');
});
In the above example, we create a separate __mocks__
directory in the same location as the moduleToMock.js
file. Inside this directory, we create a mock module with the same name as the original module. When importing the constant in the test file, Jest automatically uses the mock module instead of the original module.
These are three different methods you can use to mock an exported const in Jest. Choose the method that best suits your needs and testing requirements. Happy testing!
Leave a Reply