A package for creating test data or for generating fixtures.
import Factory from 'factory';
const factory = new Factory();
// Reference to mongo collections. Depending on how you interface with mongo
// getting these references will vary. The important part is that the collection
// should have the async functions `insert` and `findOne`.
const { authors, books } = db;
factory.define('author', authors, {
name: 'John Smith'
}).after(author => {
// Do something smart
});
factory.define('book', books, {
authorId: factory.get('author'),
name: 'A book',
year() { return _.random(1900, 2014); }
});
// We can also extend from an existing factory
factory.define('anotherBook', books, factory.extend('book', {
// ...
}));
// Ex. 1: Inserts a new book into the books collection
const book = factory.create('book');
// Ex. 2: New fields can be added or overwritten
const book = factory.create('book', { name: 'A better book' });
Note: When calling factory.create('book')
both the Book and an Author are created. The newly created Author _id
will then be automatically assigned to that field. In the case of calling factory.build('book')
as no insert operations are run, the _id
will be faked.
factory.define('name', Collection, doc).after(doc => { ... })
- name
- A name for this factory
- Collection
- A mongo collection
- doc
- Document object
- .after hook (Optional)
- Returns the newly inserted document after calling
factory.create
- Returns the newly inserted document after calling
factory.get('name')
Returns the instance of name. Typical usage is to specify a relationship between collections as seen in the Book example above.
factory.build('name', doc)
Builds the data structure for this factory
- name
- The name defined for this factory
- doc (Optional)
- Document object
factory.tree('name', doc)
Builds an object tree without _id
fields. Useful for generating data for templates.
- name
- The name define for this factory
- doc (Optional)
- Document object
Example:
factory.define('author', authors, {
name: "John Smith"
});
factory.define('book', books, {
name: "A book",
author: factory.get('author')
});
const book = factory.tree('book');
book
then equals:
{
name: 'A book',
author: {
name: 'John Smith'
}
}
factory.create('name', doc)
Creates (inserts) this factory into mongodb
- name
- The name defined for this factory
- doc (Optional)
- Document object
factory.extend('name', doc)
Extend from an existing factory
- name
- The name defined for this factory
- doc (Optional)
- Document object
MIT.
Node Factory is based on https://github.com/versolearning/meteor-factory MIT. (c) Percolate Studio