Skip to content

RamonEspinosa/google-maps-vitest-mocks

Repository files navigation

Google maps vitest mocks

⚡️ Easy to use vitest mocks for google maps. This is a rewrite of @googlemaps/js-jest-mocks, meant to be used with vitest instead of jest.

Getting started

Installation and usage

With npm:

$ npm i --save-dev google-maps-vitest-mocks
# or
$ yarn add -D  google-maps-vitest-mocks

Usage

This package has been designed to be used as @googlemaps/js-jest-mocks.

Inspecting mocks

You can inspect what happens with the created mock instances (e.g. Map or Marker) via the mockInstances object.

import {
  initialize,
  Map,
  Marker,
  mockInstances,
} from "google-maps-vitest-mocks";
import { beforeEach, test, expect } from "vitest";

beforeEach(() => {
  initialize();
});

test("my test", () => {
  const map = new google.maps.Map(null);
  const markerOne = new google.maps.Marker();
  const markerTwo = new google.maps.Marker();

  map.setHeading(8);
  markerOne.setMap(map);
  markerTwo.setLabel("My marker");

  const mapMocks = mockInstances.get(Map);
  const markerMocks = mockInstances.get(Marker);

  expect(mapMocks).toHaveLength(1);
  expect(markerMocks).toHaveLength(2);
  expect(mapMocks[0].setHeading).toHaveBeenCalledWith(8);
  expect(markerMocks[0].setMap).toHaveBeenCalledTimes(1);
  expect(markerMocks[1].setLabel).toHaveBeenCalledWith("My marker");
});

Cleaning up mocks

Whenever initialize() is called, the captured mocks are automatically cleaned. Using any of Jest's methods, you can clean the mock instances at any time:

import {
  initialize,
  Map,
  Marker,
  mockInstances,
} from "google-maps-vitest-mocks";
import { beforeAll, beforeEach } from "vitest";

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

// Clear all mocks
beforeEach(() => {
  mockInstances.clearAll();
});

// Clear specific mocks
beforeEach(() => {
  mockInstances.clear(Map, Marker);
});

Extending mocks

You can add new mocks or extend the default mock instances to match your needs.

import { initialize, mocks, Map } from "google-maps-vitest-mocks";

beforeEach(() => {
  const MyCustomMapMock = vi.fn(() => ({
    getZoom: vi.fn(() => 10),
  }));
  initialize({ ...mocks, Circle: MyCustomMapMock });
});

Contributing

If you want to contribute to this repository and don't know how, please watch this tutorial. Here's a list of steps to follow:

  1. Fork the repository and create your branch.
  2. Run npm install in the repository root.
  3. If you've fixed a bug or added code that should be tested, please add tests.
  4. Ensure the test suite passes with npm run test.
  5. Make sure your code lints and follows this project code's style.
  6. Send a pull request specifying the type of commit:
    • feat: A new feature you're adding.
    • fix: A bug fix.
    • refactor: Refactoring a specific section of the codebase.
    • test: Everything related to testing.
    • docs: Everything related to documentation.
    • chore: Regular code maintenance.

License

Apache 2.0

About

Vitest mocks for google maps

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published