Randoc
Generates random documents based on a simple schema using Chance.js functions.
Handy for creating test / stub data.
Getting started
Install
$ npm install --save randoc
Create one random document
const randomDocument = ; const oneDoc = ; // { name: 'Jorge Floyd', age: 60 }
Where name
and age
are both Chance.js functions.
Create many random documents
const randomDocuments = ; const lots = ; /* [ { name: 'Chase', employed: false }, { name: 'Alejandro', employed: true }, { name: 'Lewis', employed: true }, { name: 'Lulu', employed: true }, { name: 'Ora', employed: false }, { name: 'Tony', employed: false }, { name: 'Nellie', employed: false }]*/
Schema
The schema types randoc
uses loosely map to functions offered by Chance.js, with a few additional options.
Simple Chance.js types
The simplest schema looks something like:
const schema = isMonday: 'bool' ;const doc = ;// { isMonday: false }
Passing an argument to the Chance.js function
const schema = isMonday: _type: 'bool' args: likelihood: 1/7 ;const doc = ;// { isMonday: false }
Another example:
;// { name: 'Norman McCoy', age: 9 }
Nested objects
randoc
supports nested objects:
const schema = isMonday: 'bool' weather: rain: 'bool' snow: 'bool' ;const doc = ;// { isMonday: false, weather: { rain: true, snow: true } }
Arrays of Chance.js types
By default, the array will have a length of 1.
const schema = professions: _type: 'profession' _array: true };const doc = ;// { professions: ['Teacher'] }
You can specify the length of the array and the likelihood of it being empty. The example below has a 30% chance of including an empty array. Otherwise it will be an array of length 3.
const schema = professions: _type: 'profession' _array: empty: 30 length: 3 };const doc = ;// { professions: [] }// or// { professions: ['Software Developer', 'Recreational Director' 'Landscape Architect'] }
Arrays of objects
If provided with an array, randoc
will create a random document for each element.
const schema = days: isMonday: 'bool' ;const doc = ;// { days: [ { isMonday: false } ] }
const schema = days: 10 ;const doc = ;/* { days: [ { isMonday: false }, { isMonday: true }, { isMonday: true }, { isMonday: false }, { isMonday: false }, { isMonday: false }, { isMonday: true }, { isMonday: false }, { isMonday: false }, { isMonday: true } ] } */
Special types
These are types not offered directly by Chance.js functions.
Enum
You may want to pick a value from a list of options:
const schema = status: _type: 'enum' options: 'new' 'available' 'expired' ;const doc = ;// { status: 'available' }
Properties that may not exist
The example below has a 70% chance of including a status
property:
const schema = name: 'name' status: _type: 'enum' _exists: 70 options: 'new' 'available' 'expired' ;const doc = ;//
Here is an example for an array of Chance.js generated cities which has a 30% chance of being empty or otherwise a length of three.
const schema = cities: _type: 'city' _exists: 30 _arrayOf: 3 ;const doc = ;// cities: []// or// cities: ['Johannesburg', 'London', 'Singapore']
Note that _exists
is currently only available for "special" types and arrays.
Unknown types
If there is no Chance.js function for the _type
you've provided, randoc
will default to using chance.string()
.
A more complete example
Here's an example schema that showcases some of the available functionality:
const schema = widget: name: 'string' storeId: _type: 'enum' options: 543 999 1232 110 deleted: _type: 'bool' args: likelihood: 5 startDate: 'date' outOfStock: _type: 'bool' args: likelihood: 10 discountable: _type: 'bool' args: likelihood: 90 status: _type: 'enum' options: 'new' 'active' 'cancelled' '' ;/*{ widget: { name: 'vU9SpLn3ZfsW3hud%DT', storeId: 1232, deleted: false, startDate: 2103-10-13T14:26:33.440Z, outOfStock: false, discountable: true }, status: 'new' }*/
License
MIT