デフォルトでは、FactoryGirlはアソシエーションのファクトリを呼び出してそれらを作成します。ファクトリの関連付けをパラメータとして渡すことができます。しかし、アソシエーションチェーンの奥深くで使用する必要があるオブジェクトをどのように渡すことができますか?
例えば:
Current_userに属するAccountを持つPostsManagerを持つPostがあります。
Factory(:post)
を実行すると、PostsManagerが作成され、(stubed)current_userに属していないアカウントが作成されます。
したがって、Postファクトリを使用する仕様では、次のことを行う必要があります。
_account = Factory(:account, user: current_user)
post_manager = Factory(:post_manager, account: account)
post = Factory(:post, post_manager: post_manager)
_
私がやりたいのは、Factory(:post, user: current_user)
を使用してファクトリを呼び出し、_current_user
_を関連付けを介してアカウントファクトリに渡すことです。そうする方法はありますか?
使用しているFactoryGirlのバージョンはわかりませんが、最近のバージョン(2.6以降)を使用している場合は、一時属性を使用できます(詳細については、 「はじめに」ページ を参照してください)。あなたはこのようなことをすることができます:
FactoryGirl.define do
factory :post do
ignore do
user nil
end
posts_manager { FactoryGirl.build(:posts_manager, :user => user) }
end
factory :posts_manager do
ignore do
user nil
end
account { FactoryGirl.build(:account, :user => user) }
end
factory :account do
user { user }
end
end
FactoryGirl.create(:post, :user => current_user)