/ / Factory Girlを使用して複数の関連オブジェクトを定義するにはどうすればよいですか? -ruby-on-rails、単体テスト、テスト、ファクトリーボット

Factory Girlを使用して複数の関連オブジェクトを定義するにはどうすればよいですか? - ruby​​-on-rails、ユニットテスト、テスト、factory-bot

Factory Girlのドキュメントは、(おそらく)親子の関連付けを作成するためのこの構文を提供します...

  Factory.define :post do |p|
p.author {|a| a.association(:user) }
end

投稿はユーザー(その「作成者」)に属します。

作成するファクトリを定義する場合はどうなりますか Users、それはたくさんあります Post

または、それが多対多の状況である場合はどうなりますか(たとえば、以下の更新を参照してください)。


更新

私はそれを理解したと思った。私はこれを試しました...

Factory.define(:user) do |f|
f.username { Factory.next(:username) }

# ...

f.roles { |user|
[
Factory(:role),
Factory(:role, {:name => "EDIT_STAFF_DATA"})
]
}
end

最初は機能しているように見えましたが、F.G。同じユーザー名とメールアドレスでユーザーを2回保存しようとしていました。

それで、元の質問に戻ります。あなたが多対多の関係を持っているなら、例えば Users そして Roles、返されるファクトリをどのように定義できますか Users いくつかの関連 Roles?ご了承ください Roles 一意である必要があるため、F.G。に新しい「ADMIN」を作成させることはできません Role DBを作成するたびに User.

回答:

回答№1は5

これが最も正しい方法かどうかはわかりませんが、機能します。

Factory.define(:user) do |u|
u.login "my_login"
u.password "test"
u.password_confirmation "test"
u.roles {|user| [user.association(:admin_role),
user.association(:owner_role, :authorizable_type => "User", :authorizable_id => u.id) ]}
end

回答№2については4

見る: http://railsondave.blogspot.com/2009/05/creating-hasmany-through-factories-with.html


回答№3の場合は1

最近の ファクトリーガールにアップデート コールバックブロックで関連付けを指定できるようにします


回答№4の場合は1

私は active_factoryプラグイン、それはこのような仕様であなたの状況を扱います:

models { user - posts(3) }

興味があれば、factory_girlファクトリーとの統合を試みます。