0

フォーム フィールドを持つフォーム オブジェクトがあります (外部キー f​​orm_id を介して)

フォームには多くの form_fields があります。

form_fields に関連付けられた form_field_labels もあります (外部キー f​​ield_id 経由)。

form_field には、1 つの form_field_label があります。

フォーム、メソッド、および検証をテストできるように、いくつかの基本的なファクトリを構築しようとしています。

これが私がこれまでに持っているものです:

FactoryGirl.define do
factory :default_form , class: Form do
    form_name "Default Form"
    form_url "default"
    enctype "multipart/form-data"
    form_type ""
    form_layout "1_column" 
    group_id 0
    response_fields "photo,first_name,last_name"
    default_form 0 
    language "en"
    submit_button_text "Submit" 
    reset_button_text "Reset" 
    default_dropdown_text "Please Select" 
    sort 0 
    default_status "NEW"
    apply_flag false
    require_advisory false
    add_button_text "Add Another Applicant"
    follows_group_default false

    factory :default_form_with_fields do
      ignore do
                form_fields_count 5
                form_field_labels_count 5
      end

      after(:create) do |form, evaluator|
                FactoryGirl.create_list(:form_field, evaluator.form_fields_count, form: form)
              end
    end
end 
end

FactoryGirl github ページから create_list 関数をコピーしましたが、基本的な Form->form_fields->form_field_label 関係のファクトリが必要なテスト ケースに必要かどうかわかりません。

createblock の後で、デフォルトのフォーム フィールドが適切に設定されているようです。問題は、すべての form_field に関連付けられた form_field_label が必要なことです。

私たちのスキーマでは、form_field_label のない form_field などはありません。

私は factory girl を初めて使用しますが、少なくともこれらの基本的な関連付けを設定して、フォームを作成するたびに、いくつかのテスト form_fields (工場の女の子を介して) といくつかのテスト form_field_labels を自動的に作成したいと考えています。

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

0

新しく作成したフォームが とform_fields関連付けられた 1 つのレコードを持つfield_labelことだけが必要な場合は、実際に を使用する必要はありませんcreate_list。コールバックで法線FactoryGirl.createを使用できafter(:create)ます。

フォーム、フォーム フィールド、フォーム フィールド ラベルの 3 つのオブジェクトすべてに対してファクトリを作成することをお勧めします。次に、コールバックを使用してピースをまとめることができます。

FactoryGirl.define do
  factory :form_field_label do
    # set form field label attributes (if any)
  end

  factory :form_field do
    # set form field attributes (if any)
    after(:create) do |form_field|
      FactoryGirl.create(:form_field_label, :form_field => form_field)
    end
  end

  factory :form do
    # set base attributes: form_name, etc.

    factory :form_with_fields do
      after(:create) do |form|
        FactoryGirl.create(:form_field, :form => form)
      end
    end
  end
end

これはテストされていませんが、動作するはずです。何か問題がありましたらお知らせください。また、これらのアソシエーションにプレゼンス バリデータがある場合は、少し異なるアプローチを使用する必要がありますFactoryGirl.build。お知らせください。説明します。

参照: FactoryGirl と has_many 関連

于 2013-01-29T00:17:13.303 に答える