Sharkhorse
Javascript Test factories
Summary
Defining Factories
Factory definitions are plain javascript objects that hold generator objects.
// message_factory.js
import {generators} from 'sharkhorse';
export const Message = {
id: generators.sequence(),
subject: generators.lorem().words(2),
from: {
name: generators.name().full(),
email: generators.email()
}
};
Building objects from factories
To build an object from a factory definition use a create
or 'createMany` function
the function would iterate through object's nested properties and evaluate all generators to their values
import {create, createMany} from 'sharkhorse';
import {Message} from './message_factory';
create(Message) // => {id: 1, subject: 'Lorem ipsum', from: {name: 'Nickolas Conrad', email: '[email protected]'}}
create(Message) // => {id: 2, subject: 'Lorem ipsum', from: {name: 'Seth Edwards', email: '[email protected]'}}
createMany()
will create an array of objects
createMany(Message, 3) // [{...}, {...}, {...}]
generators
sequence()
generates an incrementing or decrementing number every time it's evaluated
generators.sequence() // 1, 2, ..
generators.sequence().decrement() // 1, 0, -1, ...
generators.sequence().startFrom(100) // 100, 101, 102, ...
number()
generates a random number
generators.number() // 285
generators.number().min(500) // 24029
generators.number().max(2)
generators.number().min(0).max(2)
randomItem(list)
generators.randomItem([1, 2, 3]) // one of the numbers
name()
generates a random name
generators.name() // Seth Edwards
generators.name().full() // Seth Edwards
generators.name().first() // Seth
generators.name().last() // Edwards
email()
generates a random unique email every time it's evaluated
generators.email() // random_0@example.com, [email protected]
templateString()
Tagged template string generator. Any generator passed as a template string value will be evaluated when passing the
generator into create
function
let MyStr = generators.templateString`test${generators.sequence()}`;
create(MyStr); // test1
create(MyStr); // test2
create(MyStr); // test3
lorem()
generates random text
generators.lorem() // Lorem ipsum dolor sit amet, per in mazim...
generators.lorem().word()
generators.lorem().words(n)
generators.lorem().paraghaph()
generators.lorem().paraghaphs(n)
date()
generators.date() // Date() object
generators.date().jsTimestamp // 1457241758397
generators.date().unixTimestamp // 1457241758
create(FactoryDefinition)
generates a new factory object from the passed argument
generate.create(MessageFactory) // {id: 1, subject: 'lorem', ...}
createMany(FactoryDefinition, n)
same as create()
but generates an array of factories