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.