我有一个包含表单字段的表单对象(通过外键form_id)
表单有很多form_fields。
还有与form_fields相关联的form_field_labels(通过外键field_id)
form_field有一个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关系的工厂。
after createblock似乎可以正确设置我的默认表单字段。问题是我需要每个form_field都有一个关联的form_field_label。
在我们的架构中,没有form_field_label就没有form_field。
我是工厂女孩的新手,并且想建立至少这些基本关联,这样每当我有一个表单时,它会自动创建一些测试form_fields(通过工厂女孩)和一些测试form_field_labels。
非常感谢任何帮助。
由于
答案 0 :(得分:0)
如果你需要的只是新创建的表单在form_fields
与field_label
的关联中有一条记录,那么你真的不需要使用create_list
。您可以在FactoryGirl.create
回调中使用正常的after(:create)
。
我建议为所有三个对象创建工厂:表单,表单字段和表单字段标签。然后你可以使用回调把各个部分放在一起:
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
使用略有不同的方法,请告诉我,我会解释。