
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!
minProperties
and maxProperties
for objects
additionalItems
for arrays
tuples
bigger than length 16
if/then/else
syntax
- proper use of
oneOf
- use objects as
dependencies
as well as arrays