8

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在使用我的工厂后做一个,但这是在很多测试中的大量重复。

4

3 回答 3

10

使用after_create钩子有效:

Factory.define :user do |f|
  f.name "Tim"
  f.after_create do |user|
    user.confirmed = true
    user.save
  end
end 
于 2012-01-18T19:04:20.290 回答
3

您必须在创建用户时将其传递到散列中,因为 FactoryGirl 正在保护它免受大规模分配。

user ||= Factory(:user, :confirmed => true)
于 2012-01-18T06:01:18.817 回答
0

另一种方法是使用 Rails 的内置角色,如下所示:

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

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

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

一些未经测试的建议来解决这个问题:

  • 您可以在工厂上方重新打开课程。
  • 您可以在 [test|spec]_helper 中重新打开课程
于 2013-06-03T16:14:51.940 回答