Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alexmic/mongoose-fakery
Fixtures replacement and random data generator for mongoose.
https://github.com/alexmic/mongoose-fakery
Last synced: 4 months ago
JSON representation
Fixtures replacement and random data generator for mongoose.
- Host: GitHub
- URL: https://github.com/alexmic/mongoose-fakery
- Owner: alexmic
- License: mit
- Created: 2013-03-24T23:17:20.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2013-03-26T02:26:32.000Z (almost 12 years ago)
- Last Synced: 2024-10-05T07:10:53.729Z (5 months ago)
- Language: JavaScript
- Size: 1.11 MB
- Stars: 47
- Watchers: 1
- Forks: 3
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# mongoose-fakery
`mongoose-fakery` provides an easy fixture replacement method and random data generators.
## Inspiration
Parts of `mongoose-fakery` where inspired by:
* [factory-boy](https://github.com/dnerdy/factory_boy)
* [factory-lady](https://github.com/petejkim/factory-lady)
* [faker](https://github.com/marak/Faker.js/)Thanks.
## Contributing
1. Clone the repo.
2. Create a branch.
3. Write awesome code.
4. Add tests for your changes. Test dependencies are defined in `package.json`.
5. Open a Pull Request.
6. Receive a 'Thank you!' and possibly a digital beer from me.## License
MIT.
## TODO
1. Associations with other models. This is my first priority.
2. Browser compatibility.
3. Add more data generators.## Documentation
### Installing
```js
npm install mongoose-fakery
```### Creating a fakery (factory)
In your `models.js`:
```js
var mongoose = require('mongoose')
, Schema = mongoose.Schema;var UserSchema = new Schema({
name: String,
surname: String
});mongoose.model('User', UserSchema);
```In your tests or fixture files:
```js
var fakery = require('mongoose-fakery');fakery.fake('user', mongoose.model('User'), {
name: 'john',
surname: 'doe'
});
```### Getting a fakery
If the only argument you pass into `fake()` is the name of the factory then
the method becomes a getter.```js
var userFakery = fakery.fake('user');
```### Lazy attributes
'Lazy' attributes are attributes that are resolved during a 'second' pass over
the attributes of the fakery. Common usage are attributes that depend
on other attributes for their value.To create a 'lazy' attribute use `fakery.lazy()`:
```js
fakery.fake('user', mongoose.model('User'), {
name: 'john',
surname: 'doe',
email: fakery.lazy(function(attrs) {
// this will return [email protected]
return attrs.name + '@example.com';
});
});
```Each lazy attribute receives all the resolved attributes of the first pass as
the only parameter.### Using data generators
Data generators are functions that return data. That data can be random or follow
specific patterns. `mongoose-fakery` comes with a number of pre-defined data generators
which will probably suit most of your needs i.e:1. random strings (hex, alpha, alphanum)
2. random numbers
3. random booleans (true/false)
4. lorem generator
5. name, surname and gender
6. picking random items from listsPre-defined data generators are exposed under the `g` attribute of the `fakery`
object. Take a look in `data_providers.js` to see all the available generators
and their APIs.Some examples:
```js
// using the user model defined above
fakery.fake('user', mongoose.model('User'), {
name: fakery.g.name(),
surname: fakery.g.surname()
});
```Generators can also be used in arrays and nested attributes:
```js
fakery.fake('post', mongoose.model('Post'), {
name: fakery.g.name(),
// this will create tags 'projects', , 'tech'
tags: ['projects', fakery.g.str(5), 'tech']
});
```Data generators can also be used when you just want to generate a bunch of random
data for whatever purpose. They are not specific to test factories:```js
var fakery = require('mongoose-fakery');// generate 10 random full names
var names = [], i;
for (i = 0; i < 10; i++) {
names.push(fakery.g.fullname());
}
```### Creating custom data generators
`mongoose-fakery` gives you the option to create custom generators that attach
themselves to the `g` attribute to the `fakery` object:```js
// declare like this
fakery.generator('custom', function() {
return 'custom';
});// use like this
var customGenerator = fakery.g.custom();
customGenerator(); // returns 'custom'
```As you might have guessed, generators wrap 'data provider' methods in a function.
You can thus do things like:```js
fakery.generator('timesTwo', function(n) {
return n*2;
});var timesTwo = fakery.g.timesTwo();
timesTwo(2); // returns 4
```### Making a fake model
To make a fake model, use the `make()` method. `make()` can also receive overrides.
```js
var model = fakery.make('user');
var modelWithOverrides = fakery.make('user', {
name: 'override'
});
```Note that the model is *not* saved to the database.
### Making & saving a fake model
To make and save a fake model, use the `makeAndSave()` method.
```js
fakery.makeAndSave('user', function(err, user) {
// `user` is saved to the database at this point
});fakery.makeAndSave('user', {name: 'override'}, function(err, user) {
// `user` is saved to the database and name is overriden to 'override'.
});
```