Property ‘mockreturnvalueonce’ does not exist on type

We can encounter the error message “property ‘mockReturnvalueOnce’ does not exist on type” when using jest.mock() with TypeScript without properly defining the mocked module.

In order to provide a detailed explanation, let’s consider an example:


// user.test.ts

import axios from 'axios';
import { getUser } from './user';

jest.mock('axios'); // Mocking the axios module

test('should fetch a user', () => {
    const mockedAxios = axios as jest.Mocked;
    const resp = { data: { id: 1, name: 'John' } };
    mockedAxios.get.mockResolvedValueOnce(resp);

    return getUser().then((user) => {
        expect(user).toEqual(resp.data);
        expect(mockedAxios.get).toHaveBeenCalledTimes(1);
    });
});
    

In this example, we are testing a function called getUser() which makes an API call using axios. We want to mock the axios module using jest.mock().

The error message “property ‘mockReturnvalueOnce’ does not exist on type” occurs because TypeScript does not recognize the mocking functions added to the mocked module. To fix this, we need to use the type assertion as jest.Mocked to explicitly tell TypeScript that the mockedAxios object has the same type as axios, including the additional mocking functions.

By using mockedAxios.get.mockResolvedValueOnce(), we specify the return value of the mocked get function of axios for the first call. This ensures that the API call within the getUser function will resolve successfully with the provided data.

Finally, we test the result and the number of calls made to axios.get() using the imported mockedAxios object.

Remember, it’s crucial to properly define the mocked module with type assertions when using jest.mock() in TypeScript to avoid the “property does not exist on type” error.

Leave a comment