Factory_girl の関連付けを使用した DRYer テスト
-
16-09-2019 - |
質問
工場に構築済みのモデルを使用させるためのより良い方法を提案できる人はいますか?
その関連付けのインスタンス?たとえば、
を Message ファクトリの子として定義し、
Factory(:my_message)
の代わりになるかもしれないFactory(:message,:sender=>@me)
?
セットアップハッシュは、この不自然なものよりも複雑である場合があります たとえば、ORは非常に多くのテストで繰り返されるため、工場に押し下げる方が良いようです。
私が考えることができる1つの代替案は、テストヘルパーメソッドを定義することです
とか create_message_owned_by(@me)
, 、しかし、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
解決
これがあなたが探しているものであるかどうかはわかりませんが、最初にメッセージを作成する場合は、それを通じて送信者を取得して、それを割り当てることができます @me
.
@my_message = Factory(:message)
@me = @my_message.sender
それは少しでも役に立ちますか?
所属していません StackOverflow