2012-11-21 11 views
5

第3モデルへのアソシエーションを持つ第2モデルへのアソシエーションを持つモデルのファクトリを持つ場合、ビルド方法を保持できますか?ネストしたアソシエーションを含むFactoryGirlビルド戦略

以下の例では、投稿はユーザーに関連付けられ、ユーザーは都市に関連付けられます。すべてのアソシエーションに:strategy => :buildが使用されている場合でも、post.userpost.user.cityはデータベースに保存されます。スピーディーなテストスイートのために、これらのデータベース書き込みが起こらないようにすることはできますか?

Factory.define do 
    factory :user do 
    name "A User" 
    association :city, :strategy => :build 
    end 

    factory :city do 
    name "A City" 
    end 

    factory :post do 
    title "A Post" 
    body "Some text here" 
    association :user, :strategy => :build 
    end 
end 

post = FactoryGirl.build(:post) 

post.new_record?   # True 
post.user.new_record?  # False 
post.user.city.new_record? # False 

答えて

2

代替ブロック構文を試しましたか?

Factory.define do 
    factory :user do 
    name "A User" 
    city { |city| city.association :city, :strategy => :build } 
    end 

    factory :city do 
    name "A City" 
    end 
end 
0

それはv4.8.0で設定オプションとしてuse_parent_strategyを追加(旧FactoryGirl)FactoryBotのように見えます。あなたのspec/rails_helperに以下を追加するにそれを回すために、デフォルトではオフになっている:

FactoryGirl.use_parent_strategy = true 

factory_botレポの関連プル要求:https://github.com/thoughtbot/factory_bot/pull/961

関連する問題