2017-09-21 13 views
0

나는 다음과 같은 정책을RSpec에 & 학자 - 매처 (Matchers) 시험 금지 권한

module Admin 
    class PostPolicy < AdminPolicy 

    def index? 
     true 
    end 

    def show? 
     scope.where(:id => record.id).exists? && user.present? && user == record.user 
    end 

    def create? 
     true 
    end 

    def update? 
     user.present? && user == record.user 
    end 

    def destroy? 
     user.present? && user == record.user 
    end 

    def delete? 
     destroy? 
    end 

    end 
end 

을하고 난 일부 RSpec에 테스트를 작성하기 위해 pundit-matchers 보석을 사용하고 있습니다. permit authorization

RSpec.describe Admin::PostPolicy do 

    subject { described_class.new(user, [:admin, post]) } 
    let(:user) { FactoryGirl.create(:user) } 

    context 'permit authorization' do 
    let(:post) { FactoryGirl.create(:post, user_id: user.id) } 

    it { is_expected.to permit_action(:edit) } 
    it { is_expected.to permit_action(:delete) } 
    end 

    context 'deny authorization' do 
    let(:post) { FactoryGirl.create(:post, user_id: user.id + 1) } 

    it { is_expected.to forbid_action(:edit) } 
    it { is_expected.to forbid_action(:delete) } 
    end 
end 

시험은 녹색,하지만 난 순서대로, 내가

ActiveRecord::RecordInvalid: 
     Validation failed: User must exist 

가 어떻게이 문제를 해결할 수있는 다음과 같은 오류를 얻을 deny authorization을 테스트 할 때 테스트를 녹색 얻을 수? 논리는 사용자 ID가 여기에 지정했기 때문에 사용자가

답변

0

시험은 실패를 편집하고 자신의 게시물을 삭제의 다른 사용자가 아닌하도록 허용한다는 것입니다 :

let(:post) { FactoryGirl.create(:post, user_id: user.id + 1) } 

를 유효하지 않습니다 - 나는에서 가정하고 당신의 포스트 모델은 게시물이 사용자에게 속하며 명확하게 user : user.id + 1이 존재하지 않습니다.

그냥

let(:post) { FactoryGirl.create(:post) } 

새 사용자가 게시물과 함께 만들어지지하기 위해 않습니다.