FactoryBot

FactoryBot/AssociationStyle

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终(不安全)

2.23

2.24

使用一致的风格定义关联。

安全

此 cop 在 EnforcedStyle: explicit 的情况下可能会导致误报。它将任何没有参数的方法调用识别为隐式关联,但它可能是用户定义的 trait 调用。

示例

EnforcedStyle: implicit(默认)

# bad
factory :post do
  association :user
end

# good
factory :post do
  user
end

# bad
factory :post do
  association :user, :author
end

# good
factory :post do
  user factory: %i[user author]
end

EnforcedStyle: explicit

# bad
factory :post do
  user
end

# good
factory :post do
  association :user
end

# bad
factory :post do
  user factory: %i[user author]
end

# good
factory :post do
  association :user, :author
end

# good (NonImplicitAssociationMethodNames: ['email'])
sequence :email do |n|
  "person#{n}@example.com"
end

factory :user do
  email
end

可配置属性

名称 默认值 可配置值

EnforcedStyle

implicit

explicit, implicit

NonImplicitAssociationMethodNames

<none>

FactoryBot/AttributeDefinedStatically

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

总是

1.28

2.24

始终将属性值声明为块。

示例

# 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

默认启用 安全 支持自动更正 添加版本 更改版本

待定

总是

2.14

2.23

在 factory_bot 调用中使用一致的括号风格。

示例

EnforcedStyle: require_parentheses(默认)

# 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'
)

ExplicitOnly: false(默认)

# bad - with `EnforcedStyle: require_parentheses`
FactoryBot.create :user
build :user

# good - with `EnforcedStyle: require_parentheses`
FactoryBot.create(:user)
build(:user)

ExplicitOnly: true

# bad - with `EnforcedStyle: require_parentheses`
FactoryBot.create :user
FactoryBot.build :user

# good - with `EnforcedStyle: require_parentheses`
FactoryBot.create(:user)
FactoryBot.build(:user)
create :user
build :user

可配置属性

名称 默认值 可配置值

包含

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

数组

EnforcedStyle

require_parentheses

require_parentheses, omit_parentheses

ExplicitOnly

false

布尔值

FactoryBot/CreateList

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

仅命令行(不安全)

1.25

2.26

检查 create_list 的使用。

此 cop 可以使用 EnforcedStyle 选项进行配置。

安全

此 cop 的自动更正不安全,因为将 n.times 替换为 create_list 会改变其返回值。

示例

EnforcedStyle: create_list(默认)

# 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 }

ExplicitOnly: false(默认)

# bad - with `EnforcedStyle: create_list`
3.times { FactoryBot.create :user }
3.times { create :user }

# good - with `EnforcedStyle: create_list`
FactoryBot.create_list :user, 3
create_list :user, 3

ExplicitOnly: true

# bad - with `EnforcedStyle: create_list`
3.times { FactoryBot.create :user }

# good - with `EnforcedStyle: create_list`
FactoryBot.create_list :user, 3
create_list :user, 3
3.times { create :user }

可配置属性

名称 默认值 可配置值

包含

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

数组

EnforcedStyle

create_list

create_list, n_times

ExplicitOnly

false

布尔值

FactoryBot/ExcessiveCreateList

默认启用 安全 支持自动更正 添加版本 更改版本

待定

2.25

-

检查列表中是否过度创建模型。

示例

MaxAmount: 10(默认)

# We do not allow more than 10 items to be created

# bad
create_list(:merge_request, 1000, state: :opened)

# good
create_list(:merge_request, 10, state: :opened)

MaxAmount: 20

# We do not allow more than 20 items to be created

# bad
create_list(:merge_request, 1000, state: :opened)

# good
create_list(:merge_request, 15, state: :opened)

可配置属性

名称 默认值 可配置值

包含

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

数组

MaxAmount

10

整数

FactoryBot/FactoryAssociationWithStrategy

默认启用 安全 支持自动更正 添加版本 更改版本

待定

2.23

2.23

在工厂关联中使用定义,而不是硬编码策略。

示例

# bad - only works for one strategy
factory :foo do
  profile { create(:profile) }
end

# good - implicit
factory :foo do
  profile
end

# good - explicit
factory :foo do
  association :profile
end

# good - inline
factory :foo do
  profile { association :profile }
end

可配置属性

名称 默认值 可配置值

包含

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

数组

FactoryBot/FactoryClassName

默认启用 安全 支持自动更正 添加版本 更改版本

已启用

总是

1.37

2.24

在显式设置类属性时使用字符串值。

此 cop 通过延迟加载应用程序文件来促进更快的测试。此外,这可以通过避免从工厂文件预加载应用程序文件来帮助您抑制与外部库结合使用时可能出现的错误。

示例

# bad
factory :foo, class: Foo do
end

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

FactoryBot/FactoryNameStyle

默认启用 安全 支持自动更正 添加版本 更改版本

待定

总是

2.16

2.23

检查 FactoryBot::Syntax::Methods 的参数的名称样式。

示例

EnforcedStyle: symbol(默认)

# bad
create('user')
build "user", username: "NAME"

# good
create(:user)
build :user, username: "NAME"

# good - namespaced models
create('users/internal')

EnforcedStyle: string

# bad
create(:user)
build :user, username: "NAME"

# good
create('user')
build "user", username: "NAME"

ExplicitOnly: false(默认)

# bad - with `EnforcedStyle: symbol`
FactoryBot.create('user')
create('user')

# good - with `EnforcedStyle: symbol`
FactoryBot.create(:user)
create(:user)

ExplicitOnly: true

# bad - with `EnforcedStyle: symbol`
FactoryBot.create(:user)
FactoryBot.build "user", username: "NAME"

# good - with `EnforcedStyle: symbol`
FactoryBot.create('user')
FactoryBot.build "user", username: "NAME"
FactoryBot.create(:user)
create(:user)

可配置属性

名称 默认值 可配置值

包含

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

数组

EnforcedStyle

symbol

symbol, string

ExplicitOnly

false

布尔值

FactoryBot/IdSequence

默认启用 安全 支持自动更正 添加版本 更改版本

待定

总是

2.24

-

不要为 id 列创建 FactoryBot 序列。

示例

# bad - can lead to conflicts between FactoryBot and DB sequences
factory :foo do
  sequence :id
end

# good - a non-id column
factory :foo do
  sequence :some_non_id_column
end

FactoryBot/RedundantFactoryOption

默认启用 安全 支持自动更正 添加版本 更改版本

待定

总是

2.23

-

检查冗余的 factory 选项。

示例

# bad
association :user, factory: :user

# good
association :user

可配置属性

名称 默认值 可配置值

包含

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

数组

FactoryBot/SyntaxMethods

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终(不安全)

2.7

-

在您的规范中使用来自 FactoryBot::Syntax::Methods 的简写。

安全

自动更正被标记为不安全,因为该 cop 无法验证您是否已在测试套件中包含 FactoryBot::Syntax::Methods

如果您使用的是 Rails,请将以下配置添加到 spec/support/factory_bot.rb 中,并确保在 rails_helper.rb 中要求该文件

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

如果您没有使用 Rails

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

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

示例

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

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

可配置属性

名称 默认值 可配置值

包含

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

数组