Home

Awesome

CircleCI codecov

json-schema-fast-check

JSON Schema is a useful way to define input and output schemas.

Property testing is a useful way to make sure that a function behaves as expected with any valid input.

json-schema-fast-check implements arbitrary JSON Schema values using the fast-check library for property testing.

Example

import jsfc from "json-schema-fast-check";
import fc from "fast-check";

const getAge = (data: any) =>
    typeof data === "object" && typeof data.age === "number"
    ? Math.floor(data.age)
    : null;

const userSchema = {
    type: "object",
    properties: {
        required: ["name", "id"],
        name: {
            type: "string"
        },
        age: {
            type: "integer",
            minimum: 0
        },
        id: {
            type: "integer"
        }
    }
}

test("my function yields positive age or null", () => {
    fc.assert(fc.property(jsfc(userSchema), user => {
        const age = getAge(user);
        return age === null || age >= 0;
    }));
});

API

The API has only two functions - the default one (which we call jsfc just cuz) and a helper function called generate.

jsfc (default)

const arbitrary = jsfc(mySchema);

Creates a fast-check arbitrary from valid JSON schema.

generate

const json = generate(mySchema);

Generates a single valid JSON object that conforms to the schema.

A note on JSON Schema

The actual schema used here is not JSON Schema but rather a subset of JSON Schema called "The Subest of JSON Schema I Was Not Too Lazy To Define." I also added some faker-js sugar (see the tests).

Contributing

Thanks for wanting to contribute! We will soon have a contributing page detaling how to contribute. Meanwhile, there are plenty of features that haven't been implemented yet. Please check out our open issues. We'd really appreciate your help!

Please note that this project is governed by the Meeshkan Community Code of Conduct. By participating in this project, you agree to abide by its terms.