All Projects → meeshkan → json-schema-fast-check

meeshkan / json-schema-fast-check

Licence: MIT license
json-schema + fast-check = Property testing in JS with JSON Schema

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].