当前位置: 动力学知识库 > 问答 > 编程问答 >

ruby on rails - Setting protected attributes with FactoryGirl

问题描述:

FactoryGirl won't set my protected attribute user.confirmed. What's the best practice here?

Factory.define :user do |f|

f.name "Tim" # attr_accessible -- this works

f.confirmed true # attr_protected -- doesn't work

end

I can do a @user.confirmed = true after using my factory, but that's a lot of repetition across a lot of tests.

网友答案:

Using an after_create hook works:

Factory.define :user do |f|
  f.name "Tim"
  f.after_create do |user|
    user.confirmed = true
    user.save
  end
end 
网友答案:

You would have to pass it into the hash when you create the user since FactoryGirl is protecting it from mass-assignment.

user ||= Factory(:user, :confirmed => true)
网友答案:

Another approach is to use Rails' built in roles like this:

#user.rb
attr_accessor :confirmed, :as => :factory_girl

When mass-assigning FactoryGirl broadcasts this role, making this pattern possible.

Pros: Keeps factories fast, simple, and clean (less code in callbacks)
Cons: You are changing your model code for your tests :(

Some untested suggestions to address the Con:

  • You could re-open the class just above your factory.
  • You could re-open the class in a [test|spec]_helper
分享给朋友:
您可能感兴趣的文章:
随机阅读: