Originally posted July 9th, 2012Updated Jan 30th, 2019DIY fixtures - forget factory_bot and their ilk. Usually I'll place these in lib/fixtures/fixtures.rb because they can be used in rake tasks and other not-specifically-test places. Add a requires to this file in test_helper or spec_helper and also in whatever rake tasks or scripts want to use them.
It's a little less aesthetically pleasing, but does the same job, is easier to debug, and has fewer potential hang-ups.
require 'faker'
class BaseFixture
def self.create(opts={})
fixture = self.new(opts)
fixture.save!
fixture
end
end
class CustomerFixture < BaseFixture
def self.new(opts={})
Customer.new(opts.reverse_merge(:name => Faker::Name.name))
end
end
For a more elaborate version, plus specs comparing this approach with factory_bot and machinist, plus demonstrating some of the challenges they have, see
github.com/chrismo/ar_fixture. The file with the specific fixture code is in
github.com/chrismo/ar_fixture/blob/master/lib/fixtures/fixtures.rbIf you have a Rails application where you frequently run into the problem of seed.rb being broken because it's not kept up-to-date, re-using this DIY fixture approach in seed.rb and your tests can help keep things current.
tags:
ComputersAndTechnology