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
相關問題