Transform runtypes type to jsverify arbitrary for generate sample of data
Runtypes-generate
convert runtypes
type to jsverify arbitrary.
Property-based testing is very awesome approach for analyze and verification program. But this approach requires the writing of generators for all datatypes in our program. This process is very time-consuming, error-prone and not DRY.
Example:
import { Number, Literal, Array, Tuple, Record } from 'runtypes'
const AsteroidType = Record({
type: Literal('asteroid'),
location: Tuple(Number, Number, Number),
mass: Number,
})
const AsteroidArbitrary = jsc.record({
type: jsc.constant('asteroid'),
location: jsc.tuple(jsc.number, jsc.number, jsc.number),
mass: jsc.number
})
But with runtypes-generate
we can get AsteroidArbitrary
from AsteroidType
:
import { makeJsverifyArbitrary } from 'runtypes-generate'
const AsteroidType = Record({
type: Literal('asteroid'),
location: Tuple(Number, Number, Number),
mass: Number,
})
const AsteroidArbitrary = makeJsverifyArbitrary(AsteroidType)
npm install --save runtypes-generate
makeJsverifyArbitrary(type: Reflect): jsc.Arbitrary<any>
- convert runtypes
to jsverify
arbitraryaddTypeToRegistry(tag: string, (x:Reflect) => jsc.Arbitrary<any>): void
- add new generator for Constraint
type with tag
in args
attribute
addTypeToIntersectRegistry(tags: string[], generator: (x: Reflect) => jsc.Arbitrary<any>): void)
- add new generator for Intersect
or custom Constraint
types. TODO examplegenerateAndCheck(rt: Reflect, opts?: jsc.Options): () => void
- run jsc.assert
for property rt.check(generatedData)
for all generatedData
obtained from makeJsverifyArbitrary(rt)
. Uses for verification custom generators for custom Constraint
type. See example in tests.PRs accepted.
If you had questions just make issue or ask them in my telegram
Small note: If editing the Readme, please conform to the standard-readme specification.
MIT © typeetfunc