factory-bro

A library for setting up JavaScript objects as test data.

Usage no npm install needed!

<script type="module">
  import factoryBro from 'https://cdn.skypack.dev/factory-bro';
</script>

README

factory-bro

NPM version build status Test coverage

Defining fixtures is repetitive and prone to errors. Factory-bro helps you by allowing fixtures to be defined in a central hub. This allows you to spend more time coding, and less time updating tests.

Installation

$ npm i --save-dev factory-bro

Overview

/**
 * Initialize factory-bro.
 */

var factoryBro = require('factory-bro');
var factory = factoryBro();
var db = [];

/**
 * Add a fixture.
 */

factory.add('user', {
  name: 'Tobi',
  age: 7,
  species: 'Ferret'
});

/**
 * Define the persistance method.
 */

factory.persist(function(data) {
  db.push(data);
});

/**
 * Access our newly created 'user' fixture, edit it and then save it to the db.
 */

factory.user({name: 'Jane'});
console.log(db);
// => [{name: 'Jane', age: 7, species: 'ferret'}];

API

factory()

// Initialize a test factory.

var factoryBro = require('factory-bro');
var factory = factoryBro();

.add()

// Add a new fixture. Takes an argument of {String} name and {Object} data.

factory.add('user', {
  name: 'Tobi',
  age: 7,
  species: 'ferret'
});

.persist()

// Define the function to be called when an object gets persisted. Takes a 
// {Function} func as an argument. The func is provided with an argument of
// {Object} data when called.

var db = [];

factory.persist(function(data) {
  db.push(data);
});

.[fixtureName]()

// Access a fixture and edit its values. Takes an optional argument of 
// {Object} data. If applicable calls the function defined by .persist() after.

var user = factory.user();

console.log(user);
// => {name: 'Tobi', age: 7, species: 'ferret'}
console.log(db);
// => [{name: 'Tobi', age: 7, species: 'ferret'}];

user = factory.user({
  name: 'Jane',
  age: 3
});

console.log(user);
// => {name: 'Jane', age: 3, species: 'ferret'}
console.log(db);
// => [
//      {name: 'Tobi', age: 7, species: 'ferret'},
//      {name: 'Jane', age: 3, species: 'ferret'}
//    ]

License

MIT © Yoshua Wuyts