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>
- convertruntypes
tojsverify
arbitraryaddTypeToRegistry(tag: string, (x:Reflect) => jsc.Arbitrary<any>): void
- add new generator forConstraint
type withtag
inargs
attributeaddTypeToIntersectRegistry(tags: string[], generator: (x: Reflect) => jsc.Arbitrary<any>): void)
- add new generator forIntersect
or customConstraint
types. TODO examplegenerateAndCheck(rt: Reflect, opts?: jsc.Options): () => void
- runjsc.assert
for propertyrt.check(generatedData)
for allgeneratedData
obtained frommakeJsverifyArbitrary(rt)
. Uses for verification custom generators for customConstraint
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