gpt4 book ai didi

ruby-on-rails - Rubocop RSpec/MultipleMemoizedHelpers 问题关于专家规范测试

转载 作者:行者123 更新时间:2023-12-04 12:33:10 25 4
gpt4 key购买 nike

我使用 Pundit 进行授权,使用 RSpec 在我的 rails 应用程序中进行测试。因此,我必须为策略创建规范。
但是,我遇到了 rubocop 抛出错误的问题:RSpec/MultipleMemoizedHelpers。
我明白这意味着我有太多 letsubject调用。我的问题是我不太确定如何解决或重构我的代码,以便它遵守我应该进行的正确调用次数。
另一件事,可以为规范文件禁用 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, :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)) }

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, :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_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的数量到任意数字。
我与它进行了艰苦的斗争。对我来说,这类似于警察会因为你有太多变数而提出进攻。 rubocoprubocop-ast禁用它,而我们通常会启用比默认设置更多的警察。请注意,您可以更改这些 letdef并且冒犯消失了(尽管您没有改变任何东西; let 只是 def 的语法糖)。
分享你的工厂似乎是个好主意,我也建议禁用警察。

关于ruby-on-rails - Rubocop RSpec/MultipleMemoizedHelpers 问题关于专家规范测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67142057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com