Some many developers use Factory Girl as a replacement to Fixtures and they depend on this gem in Test cases writing.
But Factory Girl can be very useful also in development and can be used in order to generate a bunch of dummy data with different specs for showing your work and reviewing all its details.
The problem we face is that Factory Girl can generate more records in tables that should have their data unchanged such as Countries table.
For example:
Factory.define :user do |f|
f.association :country
end
Factory.define :job do |f|
…
f.association :user
end
Now, when we run this piece of code that generates 10 jobs
10.times { Factory.create(:job) }
we will get 10 countries auto-generated
violating the rule we wish to maintain which is having the countries table as it is
To workaround this problem without causing any changes in the code written previously, i came up with that solution
class Factory
class << self
alias_method :create_original, :create
def create(name, overrides = {})
if name.to_s == 'country'
country = Country.first
return country if country
end
create_original(name, overrides)
end
end
end
The logic introduced in the above script is simply adding a layer before creation that checks if the created object of certain type and if that type is desired to not be generated, we return the first entry we have in the DB else we do the normal creation
You can add this script in a file and load it in the development environment and use Factory Girl safely without fearing of generating data for tables that should remain as lookup tables
Enjoy :)
No comments:
Post a Comment