0

次のように、テスト用のファクトリを定義しようとしています。

factory :content do
  id
  name
  after(:create) do |content|
    create(:title, :title_id => content.id)
  end
end

# --------------

factory :title do
  title_id
  title_name
  after(:create) do |title|
    create(:some_other_model, :this_id => title.title_id)
  end
end`

したがって、基本的に、テスト用のデータを含む5つのテーブルを設定したいと思います。これは、挿入される次のレコードが前のレコードのIDを持つことができるように、特定の順序で実行する必要があります。これは、上記で定義したファクトリで、次のような 1 つの呼び出しだけで可能です。ファクトリで定義されているように、FactoryGirl.create(:content)内部的に呼び出しを行っているためです。

ここで、同じことを行いたいが、スタック内のより深い属性に特定の値を設定したいとします (たとえば:some_other_model.name => 'Name')、これを行うにはどうすればよいでしょうか?

4

1 に答える 1

0

これはエレガントではありませんが、私は自分の工場でこのパターンに何度か従いました:

factory :foobar do
  ignore do
    goobar_color nil
  end

  after(:create) do |foobar, evaluator|
    create(:goobar, :foobar => foobar, :goobar_color => evaluator.goobar_color)
  end
end

次に、foobar を作成するときに、関連する goobar の色を指定できます。

create(:foobar, :goobar_color => "red")

必要に応じて、これをより深く拡張できるはずです (つまり、goobar ファクトリに、属性を foobar ファクトリで設定できる hoobar オブジェクトを作成させます)。

于 2013-05-16T20:18:16.130 に答える