使用FactoryGirl设置受保护的属性

时间:2012-01-18 05:29:49

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 factory-bot attr-protected

FactoryGirl不会设置我的受保护属性user.confirmed。这里最好的做法是什么?

Factory.define :user do |f|
  f.name "Tim"          # attr_accessible -- this works
  f.confirmed true      # attr_protected -- doesn't work
end 

使用我的工厂后我可以做@user.confirmed = true,但在很多测试中都会有很多重复。

3 个答案:

答案 0 :(得分:10)

使用after_create挂钩工作:

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

答案 1 :(得分:3)

您必须在创建用户时将其传递给哈希,因为FactoryGirl正在保护它免受批量分配。

user ||= Factory(:user, :confirmed => true)

答案 2 :(得分:0)

另一种方法是使用Rails的内置角色:

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

当批量分配FactoryGirl广播此角色时,使这种模式成为可能。

优点:让工厂保持快速,简单和干净(回调中的代码更少)
缺点:您正在更改测试的型号代码:(

一些未经测试的解决Con的建议:

  • 您可以在工厂上方重新开课。
  • 您可以在[test | spec] _helper
  • 中重新打开课程