如何解决Rubocop RSpec/MultipleMemoizedHelpers 问题关于专家规范测试
我使用 Pundit 进行授权,使用 RSpec 在我的 Rails 应用程序中进行测试。因此,我必须为这些政策制定规范。
但是,我遇到了 rubocop 抛出错误的问题:RSpec/MultipleMemoizedHelpers。
我知道这意味着我有太多的 let
和 subject
调用。我的问题是我不太确定如何解决或重构我的代码,使其符合我应该进行的正确调用次数。
还有一点,可以对规范文件禁用 RSpec/MultipleMemoizedHelpers 吗?
以下是三个存在问题的政策规范文件。
require "rails_helper"
describe AnswerPolicy do
subject { described_class }
let(:user_admin) { build(:user,:admin) }
let(:consultant) { build(:consultant) }
let(:user_consultant) { build(:user,:consultant,consultant: consultant) }
let(:client) { build(:client,consultant: consultant) }
let(:user_client) { build(:user,:client,client: client) }
let(:other_client) { build(:client,consultant: build(:consultant)) }
let(:answer) { build(:answer,client: client) }
let(:other_answer) { build(:answer,client: other_client) }
permissions :update? do
it "allows access to admin" do
expect(described_class).to permit(user_admin)
end
it "prevents consultants to update other non-client answers" do
expect(described_class).not_to permit(user_consultant,other_answer)
end
it "prevents clients to update their answers" do
expect(described_class).not_to permit(user_client,answer)
end
it "allows consultants to update their client's answers" do
expect(described_class).to permit(user_consultant,answer)
end
end
end
describe AssessmentStepPolicy do
subject { described_class }
let(:user_admin) { build(:user,consultant: build(:consultant)) }
permissions :view? do
it "allows access to admin" do
expect(described_class).to permit(user_admin)
end
it "prevents consultants to view other non-client assessment details" do
expect(described_class).not_to permit(user_consultant,other_client)
end
it "allows clients to view their assessment details" do
expect(described_class).to permit(user_client,client)
end
it "prevents clients to view other client's assessment details" do
expect(described_class).not_to permit(user_client,other_client)
end
it "allows consultants to view their client's answers" do
expect(described_class).to permit(user_consultant,client)
end
end
permissions :create? do
it "allows access to any admin" do
expect(described_class).to permit(user_admin)
end
it "prevents consultants to assess other clients" do
expect(described_class).not_to permit(user_consultant,other_client)
end
it "prevents clients to assess themselves" do
expect(described_class).not_to permit(user_client,client)
end
it "allows consultants to assess their clients" do
expect(described_class).to permit(user_consultant,client)
end
end
end
require "rails_helper"
describe ReportPolicy do
subject { described_class }
let(:user_admin) { build(:user,client: client) }
let(:other_consultant) { build(:consultant) }
let(:other_client) { build(:client,consultant: other_consultant) }
permissions :dashboard? do
it "allows access to admin" do
expect(described_class).to permit(user_admin)
end
it "prevents clients to view other client dashboards" do
expect(described_class).not_to permit(user_client,other_client)
end
it "prevents consultants to view other non-client dashboards" do
expect(described_class).not_to permit(user_consultant,other_client)
end
it "allows clients to view their dashboard" do
expect(described_class).to permit(user_client,client)
end
it "allows consultants to view their client's dashboards" do
expect(described_class).to permit(user_consultant,client)
end
end
end
解决方法
这个RSpec/MultipleMemoizedHelpers
警察是有争议的。它希望您将 let
的数量限制为任意数量。
我很努力地反对它。对我来说,这类似于警察会因为你有太多变数而提出进攻。 rubocop
和 rubocop-ast
已禁用它,而我们通常会启用比默认设置更多的警察。请注意,您可以将这些 let
更改为 def
并且违规行为消失(尽管您没有更改任何内容;let
只是 def
的语法糖)。
分享你的工厂似乎是个好主意,我也建议禁用警察。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。