RSpecRails

RSpecRails/AvoidSetupHook

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

待定

始终

2.4

-

检查测试是否使用 RSpec before 钩子而不是 Rails setup 方法。

示例

# bad
setup do
  allow(foo).to receive(:bar)
end

# good
before do
  allow(foo).to receive(:bar)
end

RSpecRails/HaveHttpStatus

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

待定

始终(不安全)

2.12

2.27

检查测试是否使用 have_http_status 而不是相等匹配器。

示例

ResponseMethods: ['response', 'last_response'] (默认)

# bad
expect(response.status).to be(200)
expect(last_response.code).to eq("200")

# good
expect(response).to have_http_status(200)
expect(last_response).to have_http_status(200)

ResponseMethods: ['foo_response']

# bad
expect(foo_response.status).to be(200)

# good
expect(foo_response).to have_http_status(200)

# also good
expect(response).to have_http_status(200)
expect(last_response).to have_http_status(200)

可配置属性

名称 默认值 可配置值

ResponseMethods

response, last_response

数组

RSpecRails/HttpStatus

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

启用

始终

1.23

2.20

强制使用符号或数字值来描述 HTTP 状态。

此 cop 仅检查 have_http_status 调用。因此,当为 EnforcedStyle: symbolicEnforcedStyle: numeric 设置时,此 cop 不会检查是否使用了以 be_* 开头的 方法。

示例

EnforcedStyle: symbolic (默认)

# bad
it { is_expected.to have_http_status 200 }
it { is_expected.to have_http_status 404 }
it { is_expected.to have_http_status "403" }

# good
it { is_expected.to have_http_status :ok }
it { is_expected.to have_http_status :not_found }
it { is_expected.to have_http_status :forbidden }
it { is_expected.to have_http_status :success }
it { is_expected.to have_http_status :error }

EnforcedStyle: numeric

# bad
it { is_expected.to have_http_status :ok }
it { is_expected.to have_http_status :not_found }
it { is_expected.to have_http_status "forbidden" }

# good
it { is_expected.to have_http_status 200 }
it { is_expected.to have_http_status 404 }
it { is_expected.to have_http_status 403 }
it { is_expected.to have_http_status :success }
it { is_expected.to have_http_status :error }

EnforcedStyle: be_status

# bad
it { is_expected.to have_http_status :ok }
it { is_expected.to have_http_status :not_found }
it { is_expected.to have_http_status "forbidden" }
it { is_expected.to have_http_status 200 }
it { is_expected.to have_http_status 404 }
it { is_expected.to have_http_status "403" }

# good
it { is_expected.to be_ok }
it { is_expected.to be_not_found }
it { is_expected.to have_http_status :success }
it { is_expected.to have_http_status :error }

可配置属性

名称 默认值 可配置值

EnforcedStyle

symbolic

numeric, symbolic, be_status

RSpecRails/InferredSpecType

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

待定

始终(不安全)

2.14

-

识别冗余的规范类型。

在设置 rspec-rails 后,您将默认在 spec/rails_helper.rb 中启用 config.infer_spec_type_from_file_location!。此 cop 与此配置协同工作。如果您禁用了此配置,也请禁用此 cop。

安全

此 cop 被标记为不安全,因为 config.infer_spec_type_from_file_location! 可能未启用。

示例

# bad
# spec/models/user_spec.rb
RSpec.describe User, type: :model do
end

# good
# spec/models/user_spec.rb
RSpec.describe User do
end

# good
# spec/models/user_spec.rb
RSpec.describe User, type: :common do
end

Inferences 配置

# .rubocop.yml
# RSpecRails/InferredSpecType:
#   Inferences:
#     services: service

# bad
# spec/services/user_spec.rb
RSpec.describe User, type: :service do
end

# good
# spec/services/user_spec.rb
RSpec.describe User do
end

# good
# spec/services/user_spec.rb
RSpec.describe User, type: :common do
end

可配置属性

名称 默认值 可配置值

Inferences

{"channels"⇒"channel", "controllers"⇒"controller", "features"⇒"feature", "generator"⇒"generator", "helpers"⇒"helper", "jobs"⇒"job", "mailboxes"⇒"mailbox", "mailers"⇒"mailer", "models"⇒"model", "requests"⇒"request", "integration"⇒"request", "api"⇒"request", "routing"⇒"routing", "system"⇒"system", "views"⇒"view"}

RSpecRails/MinitestAssertions

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

待定

始终

2.17

-

检查是否使用 Minitest 样式的匹配器。

检查是否使用以 assert_refute_ 开头的 Minitest 样式的匹配器。

示例

# bad
assert_equal(a, b)
assert_equal a, b, "must be equal"
assert_not_includes a, b
refute_equal(a, b)
assert_nil a
refute_empty(b)
assert_true(a)
assert_false(a)

# good
expect(b).to eq(a)
expect(b).to(eq(a), "must be equal")
expect(a).not_to include(b)
expect(b).not_to eq(a)
expect(a).to eq(nil)
expect(a).not_to be_empty
expect(a).to be(true)
expect(a).to be(false)

RSpecRails/NegationBeValid

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

待定

仅命令行(不安全)

2.23

2.29

强制使用be_invalidnot_to来否定be_valid

安全性

此检查器不安全,因为它无法保证测试目标是ActiveModel::Validations的实例。

示例

强制样式:not_to(默认)

# bad
expect(foo).to be_invalid

# good
expect(foo).not_to be_valid

# good (with method chain)
expect(foo).to be_invalid.and be_odd

强制样式:be_invalid

# bad
expect(foo).not_to be_valid

# good
expect(foo).to be_invalid

# good (with method chain)
expect(foo).to be_invalid.or be_even

可配置属性

名称 默认值 可配置值

EnforcedStyle

not_to

not_to, be_invalid

RSpecRails/TravelAround

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

待定

始终(不安全)

2.19

-

建议在before中进行旅行,而不是在around中。

安全性

此检查器不安全,因为自动travel_back仅在被视为与 Rails 相关的测试用例上运行。

此外,此检查器的自动更正也不安全,因为如果在around中旅行之前存在其他步骤,执行顺序将会改变。

示例

# bad
around do |example|
  freeze_time do
    example.run
  end
end

# good
before { freeze_time }