A package for creating test data or for generating fixtures.
$ meteor add dburles:factory
Authors = new Meteor.Collection("authors");
Books = new Meteor.Collection("books");
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 meteor 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
Fake makes a great companion package. See https://atmospherejs.com/anti/fake
Supports Meteor 2.8+
await Factory.buildAsync('name', doc)
Works as build
function but support async api
await Factory.create('name', doc)
Works as create
function but support async api
await Factory.tree('name', doc)
Works as tree
function but support async api
MIT. (c) Percolate Studio
factory was developed as part of the Verso project.