Factory Bot Hits 3.0!

Josh Clayton

Factory Bot is now 3.0! It’s been a wonderful eight months and I’m really excited about what we’ve added in 2.x. We’ve adopted semantic versioning and it’s been a good way to ensure that we’re providing software that’s reliable and stable.

The Big Changes

No more Ruby 1.8 support

You heard correctly; FactoryBot requires Ruby 1.9+. We want to continue to move forward and supporting 1.8 was something we felt was holding us back. Ruby 1.9 introduces awesomeness like BasicObject, something we had to backport to 1.8 with ActiveSupport — no more!

If you can’t upgrade to Ruby 1.9 and Rails 3, you can continue to use factory_bot_rails version 1.x and FactoryBot 2.x; those will continue to support Ruby 1.8.7+ and Rails 2.3.9+.

No more Rails 2 support

FactoryBot 3.0 now only supports Rails 3.x. This will allow us to move forward without having to worry about outdated versions of gems like ActiveSupport.

Vintage syntax deprecated

The vintage syntax has been deprecated and will be removed in the next major release. For those who don’t know what the vintage syntax is, it follows any of these forms:

Factory(:comment)
Factory.next(:email)
Factory.stub(:article)

Factory.define(:admin_user, :parent => :user) do |admin|
  admin.admin true
end

The alternates for each of these would be (after configuring FactoryBot to play nicely with RSpec, Test::Unit, or Cucumber):

create(:comment)
generate(:email)
build_stubbed(:article)

factory :admin, parent: :user do
  admin true
end

We chose to do this because the new syntax is awesome and more concise. Plus, repeating Factory.define thirty or forty times in a single file is gross.

Upgrading

To upgrade in a Rails app, just update your Gemfile:

group :test do
  gem "factory_bot_rails", "~> 3.0"
end

If you’re not running Rails:

gem "factory_bot", "~> 3.0"

What’s next

Factory Bot 2.x introduced a cleaner syntax, traits, ignored attributes, creating multiple records at a time, custom constructors, and more. There are some awesome ideas floating around for 3.x, including separating associations from foreign keys, cleaning up how custom constructors work, ways to define both custom callbacks and custom strategies, and more. Keep your eyes peeled as we move forward!


Disclaimer:

Looking for FactoryGirl? The library was renamed in 2017. Project name history can be found here.