Search code examples
javascriptgoogle-mapsjestjs

Manually mock Google Maps in Jest


I want to mock the google maps API that I am using with the @googlemaps/js-api-loader package.

For now, I need to ensure that the geocoder was called and I am trying to do so by:

const mockGeocoder = jest.fn();

jest.mock('google.maps.Geocoder', () => () => ({
  geocoder: mockGeocoder,
}));

But I get

Cannot find module 'google.maps.Geocoder' from 'tests/unit/usecases/maps/getPlaceByAddress.spec.ts'

  3 | const mockGeocoder = jest.fn();
  4 |
> 5 | jest.mock('google.maps.Geocoder', () => () => ({

Not sure how to proceed. Can anyone help me with this?


Solution

  • I did the following:

    const setupGoogleMock = () => {
      global.window.google = {
        maps: {
          Geocoder: jest.fn(() => ({
            geocode: mockGeocoder,
          })),
          GeocoderStatus: {
            ERROR: 'ERROR',
            INVALID_REQUEST: 'INVALID_REQUEST',
            OK: 'OK',
            OVER_QUERY_LIMIT: 'OVER_QUERY_LIMIT',
            REQUEST_DENIED: 'REQUEST_DENIED',
            UNKNOWN_ERROR: 'UNKNOWN_ERROR',
            ZERO_RESULTS: 'ZERO_RESULTS',
          },
        } as any,
      };
    };
    

    and then

    beforeAll(() => {
      setupGoogleMock();
    });
    

    This is where I found the answer.