Skip to content

Latest commit

 

History

History
96 lines (76 loc) · 3.13 KB

README.md

File metadata and controls

96 lines (76 loc) · 3.13 KB

Unionized

Unionized is a factory library for setting up JavaScript objects as test data. Compare to the factory_girl Ruby gem by thoughtbot.

NPM version NPM license Dependency status Build Status

Links

Examples

Define a factory:

var humanFactory = unionized.factory({
  name: {
    first: unionized.enum(['Azrael', 'Bastiaan', 'Laurentiu', 'Gerolf']),
    last: 'Smithy'
  },
  birthdate: function() { return new Date() }
})

Use that factory to create instances:

var human = humanFactory.create()
/*
 { name: { first: 'Gerolf', last: 'Smithy' }
   birthdate: Sun May 17 2015 16:52:25 GMT-0700 (PDT) }
*/

You can override the defaults if you like, using dot notation:

var chen = humanFactory.create({ 'name.first': 'Chen' })
/*
 { name: { first: 'Chen', last: 'Smithy' }
   birthdate: Sun May 17 2015 16:58:19 GMT-0700 (PDT) }
*/

You might want factories that are composed out of other factories:

var organizationFactory = unionized.factory({
  name: 'Board Game Club',
  members: unionized.array(humanFactory, 4)
})
organizationFactory.create()
/*
 { name: 'Board Game Club',
   members: [
     { name: { first: 'Bastiaan', last: 'Smithy' },
       birthdate: Sun May 17 2015 17:09:52 GMT-0700 (PDT) },
     { name: { first: 'Azrael', last: 'Smithy' },
       birthdate: Sun May 17 2015 17:09:52 GMT-0700 (PDT) }
     { name: { first: 'Gerolf', last: 'Smithy' },
       birthdate: Sun May 17 2015 17:09:52 GMT-0700 (PDT) }
     { name: { first: 'Bastiaan', last: 'Smithy' },
       birthdate: Sun May 17 2015 17:09:52 GMT-0700 (PDT) }
   ] }
*/

You might want to pass arguments into your factory definitions:

var humanFactoryWithAge = humanFactory.factory (age) => {
  birthDate: moment().subtract(age, 'years').toDate()
};

var legalDriver = humanFactoryWithAge.create({}, 16);
/*
   { name: { first: 'Azrael', last: 'Smithy' }
     birthdate: Sun May 17 2000 15:00:02 GMT-0700 (PDT) }
*/

More features you may be interested in:

License

The MIT License (MIT)