$ npm install sails-relational-fixtures
or add the module to your package.json
and run
$ npm install
Drop your fixtures in test/fixtures
as JSON files named after your models.
Once your Sails.js server is started:
var fixtures = require('sails-relational-fixtures'),
data = fixtures.load().objects;
fixtures.populate(function(err) {
...
});
After load
the fixture data will be accessible via the objects
property.
Populate
'ing the test database involves two steps:
- Removing any existing data from the collection corresponding to the fixture
- Loading the fixture data into the database
Occasionally fixutres may require associations, typically more common in tests.
sails-fixtures
has special parameters reserved to identify and associate objects as they are created.
To identify a fixture within your own text/fixtures
files, assign a number to the field _associationId
on any object. For example:
[{
"_associationId": 1,
"name": "Apple"
}, {
"_associationId": 2,
"name": "Orange"
}]
These _associationId
s are not required and do not have to be in order. They will be used as a reference for any objects that require these entities.
NOTE: _associationId
is unique to a model. Meaning you can use an _associationId
of 1 in multiple fixture .json
files, just not in the same file more than once.
A loose association is one that is not required at the time of model creation. All fixtures without required associations will be updated with their associations after all of the model creation has been completed.
To associate an object, using the _associationId
supplied above, use our model notation. This works both for single models:
"favouriteFruit": {
"_association": 2,
"_model": "fruit"
}
And collections:
"availableFruit": {
"_association": [1, 2],
"_model": "fruit"
}
Note that the _model
attribute references the Sails.js entity that the association references.
If your model requires that an association be in place upon creation, you can do so by adding the parameter _required
:
"favouriteFruit": {
"_association": 2,
"_model": "fruit",
"_required": true
}
sails-relational-fixtures
does not yet support required collections. If there are any circular dependencies, sails-relational-fixtures
will throw an error.
Copyright (c) 2014 Matt Doak
Inspired by Ruslan Bredikhin in Barrels