The capabilities are introduced by this tutorial of factory-girl . We are going to begin with a easy factory for the hypothetical consumer model and slowly enhance it. This guide may well not protect every aspect of factory-girl , but should act as a good kick off point.
An Individual Factory
Why don’t we begin with a easy user factory, once we continue, we are going to carry on changing this factory to incorporate functionality and show just exactly exactly how factory-girl works.
If we require a person item now, we could just ask factory-girl to construct one for people. Which is awesome, although not very helpful yet. Most of the things we get back from factory-girl now have same home values.
The build api enables us to pass through characteristics to bypass standard ones, therefore we may do:
Once more, this can be handy, yet not invaluable, it needs us to help keep supplying an email that is new each and every time you want to produce a person model.
factory-girl has a remedy: sequences. As opposed to supplying a value that is hardcoded we are able to inform factory-girl to alternatively work with a series. A small modification into the model-factory meaning:
Now we have an email that is new each time we ask factory-girl for a person example:
Better! let us include title and about attributes for the consumer models:
This will work fine, exactly what for those who have a few test instances that anticipate going to be actually a paragraph? Or in other words have individual names that look a little practical in place of user title 1 ? factory-girl provides another goodie that individuals may use for a far more ‘realistic’ data: chancejs . You can easily find out about chancejs right right here. factory-girl exposes a straightforward ‘ opportunity’ api that may be easily utilized to populate areas with information created by chancejs .
Let’s say you prefer going to have simply 2 sentences or names to own a center title because well or passwords to become a bit much much longer? Not a problem, you can easily simply pass any choices anticipated by the chancejs api:
Our consumer factory will create instances such now as:
Let’s imagine we would like our consumer circumstances to own a password expiration date. Presuming the date has to take the future (besides the test instance where it willn’t), hard-coding the date doesn’t seems elegant. Suppose by default we want the expiration date to become a from now (i.e. when the instance is being created) month.
Anywhere you must do one thing to calculate a value for the characteristic, a function can be provided by you that returns the worthiness. Our User factory now becomes:
Let’s say you should do one thing asynchronous? Anywhere for you to do one thing asynchronous, provide a function just that comes back a promise that resolves into the value become populated.
Up to now we’ve been coping with a model that is single. A lot of the times you have got a few models related to one another you will find a few means factory-girl lets you have associations. Suppose we wish to own our users to own a profile image. We start with determining a factory for profile image model (presuming we curently have a ProfileImage model):
To associate a profile image with factory models that are generated we could just do:
factory-girl will now produce a ProfileImage example and put its id feature within the profileImage feature associated with the developed consumer example.
Exactly exactly exactly What if you need the ProfileImage example it self become assigned to profileImage ? Simply do not pass ‘id’ plus the ProfileImage example it self shall be assigned into the profileImage characteristic.
Remember that factory.assoc will continue the model example to DB. Just in case you do not want the model to be persisted, usage factory.assocAttrs which just develops the characteristics and does not continue a model into the DB.
Every so often you may wish to associate multiple model example. As an example, let’s imagine we wish our users to own a listing of details. Assuming we already have actually an Address model, we first determine the Address factory:
Now, we could inform factory-girl to associate multiple details with our User circumstances:
Much like factory.assocAttrs we now have factory.assocAttrsMany to associate non-persisted models or their characteristics.
All is well so far! We are able to currently see factory-girl making our life better to build model instances. But, it’s still limited by a point. Let’s say you’ve got 20 test instances for users with expired password? It will likely be tiresome to suitable link bypass the passwordExpiry attribute for every one of those test situations. Include some more characteristics that will alter with various test instances and things may quickly escape hand.
factory-girl enables you to model that is define having an initializer function in the place of an object. To begin with, we simply produce a change that is simple
Realize that rather than an initializer item, we’ve a function which takes a quarrel buildOptions and comes back the initializer item. The buildOptions may be specified whenever factory-girl that is requesting produce an example. With the initializer function you can easily customise your models any real means you desire.
Let us first modify our factory a little to utilize buildOptions , then we are going to observe how to pass through buildOptions :
Now, whenever asking for factory-girl to produce a person example, we are able to do: