@nrk/expect-openapi

Expect objects to match OpenAPI documents

Usage no npm install needed!

<script type="module">
  import nrkExpectOpenapi from 'https://cdn.skypack.dev/@nrk/expect-openapi';
</script>

README

expect-openapi npm

Expect objects to match OpenAPI documents

Setup

yarn add -D @nrk/expect-openapi
# or
npm add --dev @nrk/expect-openapi

jest.setup.ts:

import { toMatchApiResponse, toMatchRef$ } from "@nrk/expect-openapi";
import expect from "expect";
expect.extend({ toMatchApiResponse, toMatchRef$ });

update the jest config:

setupFiles: ["<rootDir>/jest.setup.ts"],

Expect response to match OpenAPI path

import superagent from "superagent";
import openapi from "./openapi.json"; // OpenAPI 3 schema

describe("my api", () => {
  it("should have valid /fantastic response, according to spec", async () => {
    const url = `http://paspi.nrk.no/some/fantastic/path`;
    const response = await superagent.get(url).accept("application/json");
    // Asserts that:
    // - mime-type matches
    // - response code exists (or default)
    // - the schema matches the response body (assumes it is JSON)
    await expect(response).toMatchApiResponse(openapi, "get", "/fantastic");
  });
});

Expect object to match a part of a OpenAPI document

import openapi from "./openapi.json"; // OpenAPI 3 schema

describe("my complex api", () => {
  it("should match SimpleLink", async () => {
    const myLink = { href: "/my/fantastic/link" };
    // Asserts that:
    // - the reference can be resolved
    // - the resolved schema matches expected value
    await expect(myLink).toMatchRef$(
      openapi,
      "#/components/schemas/SimpleLink"
    );
  });
});