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

作品:

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

すばらしい発見。もっと最近のバージョンのfactory girlは、構文を 'after(:create)'に変更しました。 [スタートガイド](https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md)を参照してください。 –

3

FactoryGirlは大量割り当てからユーザを保護しているので、ユーザを作成するときにハッシュに渡す必要があります。 after_createフックを使用して

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

ありがとう - ちょうどこれを試したが、それは動作しませんでした – brittohalloran

+2

私のためにFactoryGirl 2.1.0で動作します。 – iwasrobbed

+0

私は2.3.2を使用していますので、それかもしれませんが、そうは思わないでしょう – brittohalloran

0

別のアプローチは、Railsのこのような役割で構築を使用することです:

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

すると、大量の割り当て、この役割FactoryGirl放送を作りますこのパターンは可能です。

長所:あなたは、あなたのテストのためのモデルのコードを変更している:(

コンに対処するためのいくつかのテストされていない提案:は、高速でシンプル、かつクリーンな工場(コールバックでより少ないコード)
短所を保持します:あなたは自分の工場上記のクラスを再開くことができ

  • あなたは再び開くことができますクラスで|
  • _helper [テスト仕様]。
関連する問題