20

Railsアプリケーションでfactory_girlプラグインを使用しています。モデルごとに、ファクトリデータを含む対応するrubyファイルがあります。

Factory.define :valid_thing, :class => Thing do |t|
  t.name 'Some valid thing'
  # t.user ???
end

さまざまなタイプのユーザーがたくさんいます(ユーザーファクトリですでに定義されています)。しかし、私が次のことを試してみると:

Factory.define :valid_thing, :class => Thing do |t|
  t.name 'Some valid thing'
  t.user Factory(:valid_user) # Fails
end

次のエラーが発生します。

# No such factory: valid_user (ArgumentError)

:valid_userは実際には有効ですが、テストでは使用できますが、工場では使用できません。ここの別のファイルで定義されたファクトリを使用する方法はありますか?

4

3 に答える 3

31

次のコードを使用する必要があります。

Factory.define :valid_thing, :class => Thing do |t|
  t.name 'Some valid thing'
  t.user { Factory(:valid_user) }
end

{} で呼び出しをラップすると、:valid_thing ファクトリが作成されるまで、Factory Girl は中かっこ内のコードを評価しません。これにより、 :valid_user ファクトリがロードされるまで強制的に待機させられます(まだロードされていないため、例は失敗しています)。また、すべての同じユーザーを持つのではなく、:valid_thing ごとに新しい :valid_user が作成されます。 :valid_thing's (これはおそらくあなたが望むものです)。

于 2010-02-10T06:00:57.040 に答える
4

次のような関連付け方法を使用してみてください。

Factory.define :valid_thing, :class => Thing do |t|
  t.name 'Some valid thing'
  t.association :valid_user
end
于 2010-02-10T03:13:22.350 に答える