FactoryBot
FactoryBot/AssociationStyle
Enabled by default | Safe | Supports autocorrection | Version Added | Version Changed |
---|---|---|---|---|
Pending |
No |
Yes (Unsafe) |
2.23 |
- |
Use a consistent style to define associations.
Safety
This cop may cause false-positives in EnforcedStyle: explicit
case. It recognizes any method call that has no arguments as an
implicit association but it might be a user-defined trait call.
Examples
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 }
FactoryBot/ConsistentParenthesesStyle
Enabled by default | Safe | Supports autocorrection | Version Added | Version Changed |
---|---|---|---|---|
Pending |
Yes |
Yes |
2.14 |
2.23 |
Use a consistent style for parentheses in factory_bot calls.
Examples
EnforcedStyle: require_parentheses
(default)
# bad
create :user
build :login
# good
create(:user)
build(:login)
EnforcedStyle: omit_parentheses
# bad
create(:user)
build(:login)
# good
create :user
build :login
# also good
# when method name and first argument are not on same line
create(
:user
)
build(
:user,
name: 'foo'
)
FactoryBot/CreateList
Enabled by default | Safe | Supports autocorrection | Version Added | Version Changed |
---|---|---|---|---|
Enabled |
Yes |
Yes (Unsafe) |
1.25 |
2.23 |
Checks for create_list usage.
This cop can be configured using the EnforcedStyle
option
Safety
This cop’s autocorrection is unsafe because replacing n.times
to
create_list
changes its returned value.
Examples
EnforcedStyle: create_list
(default)
# bad
3.times { create :user }
3.times.map { create :user }
[create(:user), create(:user), create(:user)]
Array.new(3) { create :user }
# good
create_list :user, 3
# bad
3.times { create :user, age: 18 }
# good - index is used to alter the created models attributes
3.times { |n| create :user, age: n }
# good - contains a method call, may return different values
3.times { create :user, age: rand }
EnforcedStyle: n_times
# bad
create_list :user, 3
[create(:user), create(:user), create(:user)]
# good
3.times.map { create :user }
FactoryBot/FactoryAssociationWithStrategy
Enabled by default | Safe | Supports autocorrection | Version Added | Version Changed |
---|---|---|---|---|
Pending |
Yes |
No |
2.23 |
2.23 |
Use definition in factory association instead of hard coding a strategy.
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.
FactoryBot/FactoryNameStyle
Enabled by default | Safe | Supports autocorrection | Version Added | Version Changed |
---|---|---|---|---|
Pending |
Yes |
Yes |
2.16 |
2.23 |
Checks for name style for argument of FactoryBot::Syntax::Methods.
Examples
EnforcedStyle: symbol (default)
# bad
create('user')
build "user", username: "NAME"
# good
create(:user)
build :user, username: "NAME"
EnforcedStyle: string
# bad
create(:user)
build :user, username: "NAME"
# good
create('user')
build "user", username: "NAME"
FactoryBot/RedundantFactoryOption
Enabled by default | Safe | Supports autocorrection | Version Added | Version Changed |
---|---|---|---|---|
Pending |
Yes |
Yes |
2.23 |
- |
Checks for redundant factory
option.
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 autocorrection 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