Factorygirlのモデルの関連付けのやり方
Factorygirlで関連付けしたモデルのテストを行いたい時があります。
そこで、Factorygirlのモデルで関連付けする方法になります。
Userモデルに対して、Postモデルが属するという関係です。
Userモデル
class User < ActiveRecord::Base has_many posts end
Postモデル
class Post < ActiveRecord::Base belongs_to user end
まずはFactorygirlのUserモデルを見てみましょう。
FactoryGirl.define do factory :user do factory :mikami do name 'mikami' end end end
次に、FactorygirlのPostモデルになります。
FactoryGirl.define do factory :post do factory :cat do content '我輩は猫である' association :user, factory: :mikami end factory :dog do content '我輩は犬である' association :user, factory: :mikami end factory :cattle do content '我輩は牛である' association :user, factory: :mikami end factory :human do content '我輩は我輩である' association :user, factory: :mikami end end end
まず、関連付けはassociation :user, factory: :michael
という風に、「モデル名」「該当するfactory(ここではmikami)」とすることで、関連付けができます。
ただし、ここで注意したいのは単純にFactorygirlでmikamiを作成した時に、関連付けは行われません。
@user = create(:mikami)
関連付けを同時に生成する場合は、次のようにします。
FactoryGirl.define do factory :user do factory :mikami do name 'mikami' after(:create) do |user|←これを書くことで、生成時に関連付けを行ってくれる create :cat, user: user create :dog, user: user create :cattle, user: user create :human, user: user end end end end
これで関連付けが行われます。