[英]How to test a Pundit Headless Policy?
滑軌:4.2專家:1.0.1
測試無頭策略的策略是什么? 當我使用README示例中提供的DSL時,就會遇到范圍界定問題。
AdminPolicy:
class AdminPolicy < ApplicationPolicy
def initialize user, resource
@user = user
@resource = resource
end
def manage_any?
user.present? && user.system_admin_role?
end
end
rspec:
require 'rails_helper'
describe AdminPolicy do
subject { described_class }
context "limited_user" do
let(:user) { create :user }
let(:resource) { nil }
permissions :show? do
it { is_expected.to_not permit :manage_any?, resource }
end
end
end
錯誤輸出:
1) AdminPolicy limited_user show? should not permit #<User id: 2380, email: "first1.last1@test.gov", [...], system_admin_role: false> and :manage_any?
Failure/Error: scope.where(id: resource.id).exists?
NameError:
undefined local variable or method `scope' for #<AdminPolicy:0x007fae12e2f618>
# ./app/policies/application_policy.rb:25:in `show?'
# /Users/mwlang/.rvm/gems/ruby-2.1.5/gems/pundit-1.0.1/lib/pundit/rspec.rb:15:in `public_send'
# /Users/mwlang/.rvm/gems/ruby-2.1.5/gems/pundit-1.0.1/lib/pundit/rspec.rb:15:in `block (3 levels) in <module:Matchers>'
# /Users/mwlang/.rvm/gems/ruby-2.1.5/gems/pundit-1.0.1/lib/pundit/rspec.rb:15:in `each'
# /Users/mwlang/.rvm/gems/ruby-2.1.5/gems/pundit-1.0.1/lib/pundit/rspec.rb:15:in `find_all'
# /Users/mwlang/.rvm/gems/ruby-2.1.5/gems/pundit-1.0.1/lib/pundit/rspec.rb:15:in `block (2 levels) in <module:Matchers>'
# ./spec/policies/admin_policy_spec.rb:13:in `block (4 levels) in <top (required)>'
Finished in 0.41901 seconds (files took 2.02 seconds to load)
發布問題后,意識到首先是如何調用#scope的。
permissions
塊用:show?
定義:show?
並應使用:manage_any?
定義:manage_any?
這是我真正想要測試的背景。 結果,我實際上是在打電話給:show?
從調用范圍的ApplicationPolicy中獲取。
在這種無頭的環境中同樣不需要resource
,因此請消除這種情況。 我們剩下以下內容:
require 'rails_helper'
describe AdminPolicy do
subject { described_class }
context "limited_user" do
let(:user) { create :user }
let(:system_admin) { create :user, system_admin_role: true }
permissions :manage_any? do
it { is_expected.to_not permit user }
it { is_expected.to permit system_admin }
end
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.