Skip to content

dengribar/meteor-factory

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Meteor Factory

A package for creating test data or for generating fixtures.

Installation

meteor add dburles:factory

Table of Contents

Examples

Defining factories

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", {
    // ...
  })
);

Creating documents

// 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" });

API

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.

define

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

get

Factory.get('name')

Returns the instance of name. Typical usage is to specify a relationship between collections as seen in the Book example above.

build

Factory.build('name', doc)

Builds the data structure for this factory

  • name
    • The name defined for this factory
  • doc (Optional)
    • Document object

buildAsync

Asynchronous version of build. Returns a Promise.

tree

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'
  }
}

treeAsync

Asynchronous version of tree. Returns a Promise.

create

Factory.create('name', doc)

Creates (inserts) this factory into mongodb

  • name

    • The name defined for this factory
  • doc (Optional)

    • Document object

createAsync

Asynchronous version of create. Returns a Promise.

extend

Factory.extend('name', doc)

Extend from an existing factory

  • name
    • The name defined for this factory
  • doc (Optional)
    • Document object

Contributing

Testing

Please submit new pull requests with tests if applicable. To run the test suite, run the following command:

meteor test-packages ./

Then open a browser at localhost:3000 (by default).

Other

Fake makes a great companion package. See https://atmospherejs.com/anti/fake

License

MIT. (c) Percolate Studio

factory was developed as part of the Verso project.

About

Meteor package for creating test data or generating fixtures

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%