0.1.4 • Published 1 year ago

openapi-response-mocker v0.1.4

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

OpenAPI Mocker

OpenAPI-mocker is a library that helps creating a mock api handler out of OpenAPI specification. The goal is to mock APIs instead of fetch in integration tests. This library helps to minimise the amount of manual work when updating the ever changeing API mocks.

The library does not validate OpenAPI-specs. Instead it tries to optimistically get example mocks out of the OpenAPI-spec. If example value is not provided it will fallback to returning the type of the field.

Usage

OpenAPIMocker is ment to be used with the library Mock Service Worker (MSW). Here is an exapmle how to use the framework.

import { rest } from "msw";
import { enableFetchMocks } from "jest-fetch-mock";
import { setupServer, SetupServerApi } from "msw/node";
import OpenAPIMocker, { Document } from "openapi-response-mocker";

// only json supported
import exampleApiSpec from "./api-with-examples.json";

// api url can be anything that you call from the application
const API_URL = "https://google.com";

// setup tests
let server: SetupServerApi;

beforeAll(async () => {
  // jest-fetch-mock to enable fetch
  enableFetchMocks();
  fetchMock.dontMock();

  // setup api
  const definition = exampleApiSpec as Document;
  const mockOpenApi = new OpenAPIMocker({ definition });
  await mockOpenApi.init();

  // setup server
  server = setupServer(
    rest.all(`${API_URL}/*`, async (req, res, ctx) =>
      mockOpenApi.handleRequest(req, res, ctx)
    )
  );
  server.listen();
});

afterAll(() => server.close());

// actual tests!

describe("Test example api", () => {
  it("should find base path", async () => {
    const res = await fetchMock(API_URL + "/").then((res) => res.json());
    const expected = {}; // here you should have some kind of expected result.
    expect(res).toEqual(expected);
  });
});

not yet supported

Contribute?

Please contribute with PR's. The framework is not yet complete