8

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

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

我可以用我的工厂后做了@user.confirmed = true,但这是遇到了很多的测试,大量的重复。

回答

10

使用的after_create挂钩工作:

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

伟大的发现。更新的工厂女孩​​版本将语法更改为'after(:create)'。请参阅[入门指南](https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md) – 2013-03-19 00:55:43

3

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

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

谢谢 - 只是试过这个,虽然它没有工作 – brittohalloran 2012-01-18 15:36:55

+2

FactoryGirl 2.1.0的作品。 – iwasrobbed 2012-01-18 15:43:14

+0

我使用2.3.2,所以这可能是它,但似乎不太可能 – brittohalloran 2012-01-18 19:05:21

0

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

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

当大众分配FactoryGirl广播这个角色,使得这种模式可能。

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

一些未经检验的建议,以解决精读:

  • 你可以重新打开刚刚超过你的工厂类
  • 在你可以重新打开类[测试|规格] _helper
相关问题