2012-10-10 2 views
0

cancan을 구현했으며 cancan wiki에서 권장하는 능력을 테스트하고 싶습니다. "사용자는 자신이 소유 한 프로젝트 만 파괴 할 수 있습니다."cancan 능력 테스트 및 MassAssignmentSecurity :: Error 받기

사양/모델/ability_spec.rb :

내가 얻을 그러나
require "cancan/matchers" 
require 'spec_helper' 

describe Ability do 
    context "user is investigator" do 
    it "user can only destroy projects which he owns" do 
     user = FactoryGirl.create(:user) 
     ability = Ability.new(user) 
     ability.should be_able_to(:destroy, Project.new(:user => user)) 
    end 
    end 
end 

:

ActiveModel::MassAssignmentSecurity::Error: 
     Can't mass-assign protected attributes: user 

모델 :

class User < ActiveRecord::Base 
    has_many :projects, dependent: :destroy   
    devise :database_authenticatable, etc...   
    attr_accessible :email, :password, :password_confirmation, :remember_me, :locale 
    validates :role, :presence => true 
end 

class Project < ActiveRecord::Base 
    belongs_to :user 
end 

공장 :

FactoryGirl.define do 
    factory :user do |f|       
    f.email { Faker::Internet.email } 
    f.password "secret" 
    f.role 1 
    end 
end 

이 오류가 발생하는 이유를 이해하고 여러 가지 방법으로 시도해 보았지만 문제를 해결할 수있는 공장에 대해 충분히 이해하지 못했습니다. 도울 수 있니?

답변

0

문제는 프로젝트를 만들 때 팩토리 걸을 사용하지 않는 것과 관련이 있습니다. 다음과 같아야합니다.

describe Ability do 
    context "user is investigator" do 
    it "user can only destroy projects which he owns" do 
     user = FactoryGirl.create(:user) 
     ability = Ability.new(user) 
     ability.should be_able_to(:destroy, FactoryGirl.create(:project, :user => user)) 
    end 
    end 
end 
관련 문제