ファクトリー・ガール初心者は:すでに存在していない場合にのみ、どのように新しいレコードを作成します
-
26-09-2019 - |
質問
1が存在しない場合にのみ、新工場を作成するために、工場出荷時の女の子で簡単な方法はありますか?
簡単な方法がない場合は、は、唯一の工場はキュウリの機能(および/またはスペック)のセットのために作成されていることを確認するための最も簡潔な手段は何でしょうか。
例えば、私は複数のキュウリの機能をテストするために「ユーザー」モデルでは、単一の(共通)管理者のレコードが必要です。理想的には私の周りのすべての管理手順を作成しますが、エラー「レコードが既に存在する」押すことなく、ラッピングの条件文なしでそれを行うにはしたいと思います。
任意の提案を高く評価した。
解決
シングルトンインスタンスを作成したり、返却のいずれかにヘルパーメソッドを作成します。
def create_or_return_admin_user @user ||= Factory(:user, :admin => true) endその後、
と
呼び出しcreate_or_return_admin_userテスト中に
他のヒント
あなたはFactory_girlにのみ、あなたは、レコードが存在する場合、またはそれがデータベースにない場合メソッドのチェックを作成する必要があること。
で行うことはできません あなたは(RSpecの前)のセットアップでそれを行う場合は、は、1つのレコードのみが存在することを確認することができます。
私たちは、このようにそれを実装している。
でキュウリは、「背景」のシナリオは、機能ファイル内の各「シナリオ」の前に実行されます。そこで、我々のセットアップ(「背景」内)の各機能ファイルの先頭に、ユーザーとは、ユーザーに管理者の役割を与えます。
さて、これは各「シナリオ」で準備し、利用可能なあなたに管理者ユーザーを与えます。
キュウリは、トランザクション内のレコードを処理しているように、この管理者ユーザーは、機能から機能をデシベルで生き残るないことに注意してください。あなたが一つの特徴で、この管理者ユーザーに何かを追加し、他の機能からそれを使用する必要があるのであれば、それを行うためのこの方法は使用できません。私はあなたの質問を理解できるようにしかし、あなたはそれがすでに作成されている場合は、管理者ユーザーを作成しようとしないことを確実にしたいです。それが唯一の機能ごとに一度作成されていることを「背景」に性を保証管理者ユーザを作成します。
あなたの代わりに各「シナリオ」に管理者ユーザーを作成することができること注。キュウリは、「シナリオ」の最後にDBから削除されますので、任意の時点で、あなたはまた、唯一のadminユーザーを持つことになります。これが乾燥していないと(あなたが唯一のいくつかの「シナリオ」で管理者ユーザーを必要としない限り、具体的には、他の「シナリオ」に存在することがない、それを必要とする)行うべきではありません。
FactoryGirlステップの定義を用いてキュウリ '背景' の例:
Background:
Given the following user exists:
| Name | Role |
| Admin | Administrator |
工場の定義:
factory :user do
name 'John Doe'
role 'Guest'
end