RSpec/FactoryBot

RSpec/FactoryBot/AttributeDefinedStatically

Enabled by default Safe Supports autocorrection Version Added Version Changed

Enabled

Yes

Yes

1.28

2.0

Always declare attribute values as blocks.

Examples

# bad
kind [:active, :rejected].sample

# good
kind { [:active, :rejected].sample }

# bad
closed_at 1.day.from_now

# good
closed_at { 1.day.from_now }

# bad
count 1

# good
count { 1 }

Configurable attributes

Name Default value Configurable values

Include

spec/factories.rb, spec/factories//.rb, features/support/factories//.rb

Array

RSpec/FactoryBot/CreateList

Enabled by default Safe Supports autocorrection Version Added Version Changed

Enabled

Yes

Yes

1.25

2.0

Checks for create_list usage.

This cop can be configured using the EnforcedStyle option

Examples

EnforcedStyle: create_list

# bad
3.times { create :user }

# good
create_list :user, 3

# good
3.times { |n| create :user, created_at: n.months.ago }

EnforcedStyle: n_times

# bad
create_list :user, 3

# good
3.times { create :user }

Configurable attributes

Name Default value Configurable values

Include

**/*_spec.rb, **/spec/**/*, spec/factories.rb, spec/factories//.rb, features/support/factories//.rb

Array

EnforcedStyle

create_list

create_list, n_times

RSpec/FactoryBot/FactoryClassName

Enabled by default Safe Supports autocorrection Version Added Version Changed

Enabled

Yes

Yes

1.37

2.0

Use string value when setting the class attribute explicitly.

This cop would promote faster tests by lazy-loading of application files. Also, this could help you suppress potential bugs in combination with external libraries by avoiding a preload of application files from the factory files.

Examples

# bad
factory :foo, class: Foo do
end

# good
factory :foo, class: 'Foo' do
end

Configurable attributes

Name Default value Configurable values

Include

spec/factories.rb, spec/factories//.rb, features/support/factories//.rb

Array

RSpec/FactoryBot/SyntaxMethods

Enabled by default Safe Supports autocorrection Version Added Version Changed

Pending

Yes

Yes (Unsafe)

2.7

-

Use shorthands from FactoryBot::Syntax::Methods in your specs.

Safety

The auto-correction is marked as unsafe because the cop cannot verify whether you already include FactoryBot::Syntax::Methods in your test suite.

If you’re using Rails, add the following configuration to spec/support/factory_bot.rb and be sure to require that file in rails_helper.rb:

RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods
end

If you’re not using Rails:

RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods

  config.before(:suite) do
    FactoryBot.find_definitions
  end
end

Examples

# bad
FactoryBot.create(:bar)
FactoryBot.build(:bar)
FactoryBot.attributes_for(:bar)

# good
create(:bar)
build(:bar)
attributes_for(:bar)