1

ファクトリがその関連付けに事前構築済みのモデル インスタンスを使用するようにするためのより良い方法を提案できる人はいますか? たとえば、次のように 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
4

2 に答える 2

2

これがあなたが探しているものかどうかはわかりませんが、最初にメッセージを作成すると、それを介して送信者を取得し、に割り当てることができます@me

@my_message = Factory(:message)
@me = @my_message.sender

それはまったく役に立ちますか?

于 2009-08-14T15:27:14.370 に答える
1

不明な依存関係を作成する問題を少し無視すると、上記の例は FactoryGirl 1.2.3 の新しいコールバックで処理できます。コールバックが追加after_buildafter_createれたため、作成されたオブジェクトがデータベースに既に存在している (取得する ID があるなど) 後で、作成されたオブジェクトに対して操作を実行できます。

factory_girl メーリング リストのこの質問このスレッドも参照してください。

于 2009-10-27T18:13:36.100 に答える