Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/petejkim/factory-lady
a factory library for node.js / javascript inspired by factory_girl
https://github.com/petejkim/factory-lady
Last synced: 2 days ago
JSON representation
a factory library for node.js / javascript inspired by factory_girl
- Host: GitHub
- URL: https://github.com/petejkim/factory-lady
- Owner: petejkim
- License: mit
- Created: 2011-12-28T17:30:58.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2018-11-21T23:50:45.000Z (almost 6 years ago)
- Last Synced: 2024-10-17T07:12:15.251Z (about 1 month ago)
- Language: JavaScript
- Homepage: http://search.npmjs.org/#/factory-lady
- Size: 337 KB
- Stars: 119
- Watchers: 5
- Forks: 107
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![build status](https://secure.travis-ci.org/petejkim/factory-lady.png)](http://travis-ci.org/petejkim/factory-lady)
# factory-lady.jsFactory-lady is a factory library for [Node.js](http://nodejs.org/) / JavaScript inspired by [Factory\_girl](http://github.com/thoughtbot/factory_girl). It works asynchronously and supports lazy attributes as well as associations.
It works as long as `new` keyword is used on the model to instantiate new objects and `save` method is used to persist objects. For example, [Mongoose](http://github.com/LearnBoost/mongoose) models follow such convention.
## Installation
Node.js:
```
npm install factory-lady
```To use Factory-lady in the browser or other JavaScript environments, just copy and include `factory-lady.js` under `lib` directory.
## Defining Factories
JavaScript:
```javascript
var Factory = require('factory-lady')
, User = require('../../app/models/user')
, Post = require('../../app/models/post');var emailCounter = 1;
Factory.define('user', User, {
email : function(cb) { cb('user' + emailCounter++ + '@example.com'); } // lazy attribute
, state : 'activated'
, password : '123456'
});Factory.define('post', Post, {
user_id : Factory.assoc('user', 'id') // simply Factory.assoc('user') for user object itself
, subject : 'Hello World'
, content : 'Lorem ipsum dolor sit amet...'
});
```CoffeeScript:
```coffeescript
Factory = require 'factory-lady'
User = require '../../app/models/user'
Post = require '../../app/models/post'emailCounter = 1
Factory.define 'user', User,
email : (cb) -> cb("user#{emailCounter++}@example.com") # lazy attribute
state : 'activated'
password : '123456'Factory.define 'post', Post,
user_id : Factory.assoc 'user', 'id' # simply Factory.assoc 'user' for user object itself
title : 'Hello World'
content : 'Lorem ipsum dolor sit amet...'
```## Using Factories
JavaScript:
```javascript
Factory.build('post', function(post) {
// post is a Post instance that is not saved
});Factory.build('post', { title: 'Foo', content: 'Bar' }, function(post) {
// build a post and override title and content
});Factory.create('post', function(post) {
// post is a saved Post instance
});Factory('post', function(post) {
// post is a saved Post instance
// same as Factory.create
});
```CoffeeScript:
```coffeescript
Factory.build 'post', (post) ->
# post is a Post instance that is not savedFactory.build 'post', title: 'Foo', content: 'Bar', (post) ->
# post is a Post instance that is not savedFactory.create 'post', (post) ->
# post is a saved Post instanceFactory 'post', (post) ->
# post is a saved Post instance
# same as Factory.create
```## License
Copyright (c) 2011 Peter Jihoon Kim. This software is licensed under the [MIT License](http://github.com/petejkim/factory-lady/raw/master/LICENSE).