5

私は通常、次の手順を使用して、factory_girlでレコードを設定します。

Given /^the following (.+) records?:$/ do |factory, table|
  table.hashes.each do |hash|
    Factory(factory, hash)
  end
end

アソシエーションを設定する際の回避策は次のとおりです。

Given the following group record:
  | id | name |
  | 1  | foo  |
And the following item records:
  | name | group_id |
  | bar  | 1        |
  | baz  | 1        |
  # ...

私はこれが悪いことを知っています。IDを使用すると、ドメインパーソンの観点から、すべてが脆弱で不可解になります。

だから、私の質問は-factory_girlと上記のようなテーブル引数との関連付けを設定するためのベストプラクティスは何でしょうか?

4

3 に答える 3

3

ファクトリで複数の関連付けを定義できます。
次のように:

Factory.define :item do |item|
    item.name          "item_name"
end

Factory.define :group do |group|
    group.name          "group_name"
    group.items         { |items| [ items.association(:item), items.association(:item) ] }
end

を実行するFactory(:group)と、2つのアイテムを含むグループアップレットが作成されます。

于 2009-11-04T13:06:54.890 に答える
0

私自身の質問に答えるためだけに:ピクルス

于 2009-11-23T12:43:20.930 に答える
0

定義されたFactoryGirlCucumberステップを使用できます:
https ://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/step_definitions.rb

キュウリの1つのステップで、アイテムとグループを設定できます。

Given the following items exists:
  | Name     | Group        |
  | Foo      | Name: Bar    |
  | Foam     | Name: Bar    |
  | Food     | Name: Bar    |

このように行う場合、グループ「Bar」の作成は「find_or_create_by」機能を使用するため、最初の呼び出しでグループが作成され、次の2回の呼び出しですでに作成されたグループが検索されます。

このようにして、3つのアイテムすべてに同じグループ「バー」が付けられ、必要な数のグループ化されたアイテムを作成できます。

于 2012-02-17T09:35:35.143 に答える