私は、Pundit-matchers gemと一緒に私の現在のプロジェクトでPunditを使用し始めました。Rails Pundit Policy SpecテストがNoMethodErrorで失敗しました
これまでのところ、一般的には私のために働いているようですが、私のテストでは問題があります。
私は一般的にpundit-matchers readmeとThunderbolt labsのブログ(http://thunderboltlabs.com/blog/2013/03/27/testing-pundit-policies-with-rspec/)の例に従おうとしました。
これは私のポリシーファイルです。
#app/policies/procedure_policy.rb
class ProcedurePolicy
attr_reader :user, :procedure
def initialize(user, procedure)
@user = user
@procedure = procedure
end
def index?
user.admin?
end
end
そして、これは私の3つのテストの
require 'rails_helper'
describe ProcedurePolicy do
subject {described_class.new(user, procedure)}
let(:procedure) {FactoryGirl.create(:procedure)}
context "for a guest" do
let(:user) {nil}
it {is_expected.not_to permit_action(:index)}
end
context "for a non-admin user" do
let(:user) {FactoryGirl.create(:user)}
it {is_expected.not_to permit_action(:index)}
end
context "for an admin user" do
let(:user) {FactoryGirl.create(:admin_user)}
it {is_expected.to permit_action(:index)}
end
end
2渡す私policy_specファイルです。 "for a non-admin user"
および"for an admin user"
のもの。 "for a guest"
テストは、今私は理由を理解
NoMethodError:
undefined method `admin?' for nil:NilClass
で失敗します。 nil
を#admin?
メソッドを持たない私のProcedurePolicyクラスの#index?
メソッドに渡しています。しかし、私がオンラインで見つけたすべてのサンプル仕様は、まさにこれを行っています。私は何を見ていないのですか?
私は本当に明白な何かを紛失している場合はお詫び申し上げます。私は数年間コーディングをしていませんでした。
[航行安全演算子]のために行きます。 (https:// stackoverflow。com/questions/36812647/what-does-amp-sum-in-ruby)defインデックス?ユーザー&.admin?終了 –