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.
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;
}));
});
The API has only two functions - the default one (which we call jsfc
just cuz) and a helper function called generate
.
const arbitrary = jsfc(mySchema);
Creates a fast-check
arbitrary from valid JSON schema.
const json = generate(mySchema);
Generates a single valid JSON object that conforms to the 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).
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.