Fixtures Suck
When modeling complex business domains, not 3 model blog software, fixtures quickly become a quagmire. What’s the size of your domain? Kevin was working on a project with 180 models. This quickly became unworkable even with only 1 fixture file per model. Fixtures don’t scale well. Scenarios are also problematic as now you have to maintain a directory hierarchy of fixtures.
Use Data Generation instead
Factory Girl
# Define
Factory.define :user do |f|
f.first_name 'John'
f.last_name 'Doe'
end
# use
user = Factory(:user)
Object Daddy
Reopens your ActiveRecord class and adds generators for each attribute.
# define
class User << ActiveRecord::Base
generator_for :username, :method => :next_user
generator_for :email, :start => 'test@domain.com' do |prev|
user, domain = prev.split('@')
user.succ + '@' + domain
end
end
# use
@user = User.generate!
Others
Machinist
Foundry
Fixjour
One can point out that fixtures are inappropriate without a categorial denunciation. They’re an entirely appropriate approach given certain problems – problems where the dataset is stable, or there are few writes.
Object mothers are great. Please, don’t always use them. It’s another tool in the toolbox.
May 6, 2009 at 4:23 am
Also, always use [Fixjour](http://nakajima.github.com/fixjour), which I say only because I wrote it. :)
May 6, 2009 at 11:25 am