2012-10-10 38 views
0

我已經實施康康,並想要測試cancan wiki建議的能力。我試圖複製「用戶只能銷燬他擁有的項目。」測試康康能力,並獲得MassAssignmentSecurity ::錯誤

規格/型號/ 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

所以這個問題與創建項目時不使用Factory Girl有關。它應該是:

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