ファクトリがその関連付けに事前構築済みのモデル インスタンスを使用するようにするためのより良い方法を提案できる人はいますか? たとえば、次のように Message ファクトリの子を定義して、 への呼び出し
で?Factory(:my_message)
を置き換えることができる
ようにします。Factory(:message,:sender=>@me)
場合によっては、セットアップ ハッシュがこの不自然な例よりも複雑であるか、非常に多くのテストで繰り返されるため、ファクトリにプッシュした方がよいように思われます。
私が考えることができる 1 つの代替手段は、 などのテスト ヘルパー メソッドを定義するcreate_message_owned_by(@me)
ことですが、factory_girl 自体に方法があることを願っています。
factory_girl 工場:
Factory.define :sender do |s|
sender.name "Dummy name"
end
Factory.define :message do |msg|
msg.text "Dummy text"
msg.association :sender
end
Factory.define :my_message, :parent=>:message do |msg|
msg.text "Dummy text"
### ? what goes here for msg.association :sender ? ###
end
MessagesControllerTest の抜粋 (shoulda を使用):
context "on GET /messages" do
setup do
@me = Factory(:sender)
@my_message = Factory(:message,:sender=>@me)
@somebody_elses_message = Factory(:message)
sign_in_as(@me)
get :index
end
should "only assign my messages" do
assert_contains(assigns(:messages), @my_message)
assert_does_not_contain(assigns(:messages), @somebody_elses_message)
end
end