Fixture-level performance without giving up FactoryBot-style test setup.
See the codeFixture-level performance without giving up FactoryBot-style test setup.
Rails fixtures are very performant. But in large companies with hundreds of models and varying Rails familiarity, maintaining a well-manicured garden of YAML files quickly becomes unrealistic.
Teams reach for tools like FactoryBot to simplify test setup and keep things readable. The tradeoff is performance. FixtureKit gives you the speed wins while letting you keep the test setup tooling your teams already use, by generating and caching fixture data on-demand.
group :test do
gem "fixture_kit"
end
# spec/fixture_kit/project_management.rb
FixtureKit.define do
owner = User.create!(name: "Alice", email: "[email protected]")
project = Project.create!(name: "Roadmap", owner: owner)
expose(owner: owner, project: project)
end
RSpec:
# spec/rails_helper.rb
require "fixture_kit/rspec"
RSpec.configure do |config|
config.use_transactional_fixtures = true
end
Minitest:
# test/test_helper.rb
require "fixture_kit/minitest"
class ActiveSupport::TestCase
self.use_transactional_tests = true
end
RSpec:
RSpec.describe Project do
fixture "project_management"
it "loads exposed records" do
expect(fixture.project.owner).to eq(fixture.owner)
end
end
Minitest:
class ProjectTest < ActiveSupport::TestCase
fixture "project_management"
test "loads exposed records" do
assert_equal fixture.owner, fixture.project.owner
end
end
fixture returns a Repository, and exposed names become reader methods.
lib/fixture_kit/version.rbbundle install
cd spec/dummy && bundle install && cd ../..
bundle exec appraisal install
git add lib/fixture_kit/version.rb spec/dummy/Gemfile.lock gemfiles/*.gemfile.lock
git commit -m "Release vX.Y.Z"
git push
gh release create vX.Y.Z --title "vX.Y.Z" --target main --generate-notes
MIT. See LICENSE.
119 followers · starred Feb 2026
965 followers · starred Feb 2026
1,138 followers · starred Feb 2026
598 followers · starred Mar 2026
Fixture-level performance without giving up FactoryBot-style test setup.
See the codeFixture-level performance without giving up FactoryBot-style test setup.
Rails fixtures are very performant. But in large companies with hundreds of models and varying Rails familiarity, maintaining a well-manicured garden of YAML files quickly becomes unrealistic.
Teams reach for tools like FactoryBot to simplify test setup and keep things readable. The tradeoff is performance. FixtureKit gives you the speed wins while letting you keep the test setup tooling your teams already use, by generating and caching fixture data on-demand.
group :test do
gem "fixture_kit"
end
# spec/fixture_kit/project_management.rb
FixtureKit.define do
owner = User.create!(name: "Alice", email: "[email protected]")
project = Project.create!(name: "Roadmap", owner: owner)
expose(owner: owner, project: project)
end
RSpec:
# spec/rails_helper.rb
require "fixture_kit/rspec"
RSpec.configure do |config|
config.use_transactional_fixtures = true
end
Minitest:
# test/test_helper.rb
require "fixture_kit/minitest"
class ActiveSupport::TestCase
self.use_transactional_tests = true
end
RSpec:
RSpec.describe Project do
fixture "project_management"
it "loads exposed records" do
expect(fixture.project.owner).to eq(fixture.owner)
end
end
Minitest:
class ProjectTest < ActiveSupport::TestCase
fixture "project_management"
test "loads exposed records" do
assert_equal fixture.owner, fixture.project.owner
end
end
fixture returns a Repository, and exposed names become reader methods.
lib/fixture_kit/version.rbbundle install
cd spec/dummy && bundle install && cd ../..
bundle exec appraisal install
git add lib/fixture_kit/version.rb spec/dummy/Gemfile.lock gemfiles/*.gemfile.lock
git commit -m "Release vX.Y.Z"
git push
gh release create vX.Y.Z --title "vX.Y.Z" --target main --generate-notes
MIT. See LICENSE.
119 followers · starred Feb 2026
965 followers · starred Feb 2026
1,138 followers · starred Feb 2026
598 followers · starred Mar 2026