json-schema-fast-check v0.0.6
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).
Todo
There is plenty of stuff that is not implemented yet. I'd really appreciate your help!
minPropertiesandmaxPropertiesfor objectsadditionalItemsfor arraystuplesbigger than length 16if/then/elsesyntax- proper use of
oneOf - use objects as
dependenciesas well as arrays