FixtureFarm
This gem lets you do two things:
- record fixtures as you browse.
- record fixtures for a block of code (e.g. setup part of a test).
Generated fixture that belongs_to a record from an existing fixture, will reference that fixture by name.
Limitations
- doesn't update fixtures
- doesn't delete fixtures
Installation
Add this line to your application's Gemfile:
gem 'fixture_farm', group: %i[development test]
And then execute:
bundle install
Or install it yourself as:
gem install fixture_farm
Usage
Record as you browse
To record as you browse in development add this to ApplicationController:
include FixtureFarm::ControllerHook if defined?(FixtureFarm)
And in ApplicationJob if needed:
include FixtureFarm::ActiveJobHook if defined?(FixtureFarm)
Then start/stop recording using tasks:
bundle exec fixture_farm record some_awesome_name_prefix
bundle exec fixture_farm status
bundle exec fixture_farm stop
Record in tests
To record in tests, wrap some code in record_new_fixtures block. For example:
include FixtureFarm::TestHelper
test 'some stuff does the right thing' do
  record_new_fixtures('some_stuff') do |stop_recording|
    user = User.create!(name: 'Bob')
    post = user.posts.create!(title: 'Stuff')
    stop_recording.call
    assert_difference 'user.published_posts.size' do
      post.publish!
    end
  end
end
Running this test generates user and post fixtures. Now you can rewrite this test to use them:
test 'some stuff does the right thing' do
  user = users('some_stuff_user_1')
  assert_difference 'user.published_posts.size' do
    user.posts.first.publish!
  end
end
License
The gem is available as open source under the terms of the MIT License.