Factory Bot is a library for setting up test data objects in Ruby. Today we will be setting up Factory Bot in Rails which uses RSpec for testing. If you are using a different test suite, you can view all supported configurations here.
To setup Factory Bot in Rails, we should follow the steps given below:
- Add
factory_bot_rails
to your Gemfile in :development, :test groupgroup :development, :test do gem 'factory_bot_rails' end
- Install gem with
bundle install
- Create a file
spec/support/factory_bot.rb
and add the following configuration insideRSpec.configure do |config| config.include FactoryBot::Syntax::Methods end
- Uncomment the following line from rails_helper.rb so all files inside
spec/support
are loaded automatically by rspec# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
- Check factory bot rails version inside Gemfile.lock and update the gem with that version in
Gemfile
. It was6.1.0
while writing this tutorial, yours may be different depending on the latest gem version.group :development, :test do gem 'factory_bot_rails', '~> 6.1.0' end
- Run
bundle install
(Optional, since nothing will change insideGemfile.lock
) - Add factories folder inside
spec
folder if it doesn’t already exist. You can then create factories insidespec/factories
folder. - Assuming you have a model User, you can create
factories/users.rb
- If attributes in
users
table are first_name, last_name, email, mobile_number. Yourusers
factory will look something like this:FactoryBot.define do factory :user do first_name { 'John' } last_name { 'Doe' } email { john@email_provider.com } mobile_number { 7860945310 } end end
- You can use the
user
factory inside youruser_specs
like thisrequire 'rails_helper' RSpec.describe User, type: :model do let(:user) { build(:user) } end
- You can view various use cases in the official documentation for using factories in your tests.
Factory Bot helps in reusing the same code in multiple test examples, this way you will have to write less code, and as they say “Less code is always better”.
Thank you for reading. Happy coding!
Image Credits: manfredsteger from Pixabay