我是使用Factory Girl的新手,我觉得我可能会对如何工作以及我应该如何使用它产生一些误解。以下是问题代码的片段。
FactoryGirl.define do
factory :li_store , :class => Store do
...store stuff...blah...blah
end
factory :li_line_item_stores_two,:class=>LineItemsStore do
association :store, :factory=>:li_store
association :line_item , :factory=>:li_line_item_two
end
factory :li_line_item_stores_three,:class=>LineItemsStore do
association :store :factory => :li_store
association :line_item , :factory => :li_line_item_three
end
现在,如果我访问:li_line_item_stores_two和:li_line_item_stores_two,每个人的商店属性都有不同的对象。对于我的测试,我需要两个对象具有相同的商店对象。
有谁知道我错过了FactoryGirl的哪些方面,或者我应该如何确保两个对象都引用相同的商店对象?
非常感谢任何帮助。
答案 0 :(得分:3)
您希望在factories.rb文件中定义 baseline 对象和属性。您不希望定义一组对象的不同相同版本。相反,factories.rb应该类似于:
FactoryGirl.define do
factory :li_store do
whatever
end
factory :li_line_item do
whatever
end
factory :li_line_item_store do
association :store, :factory => :li_store
association :line_item, :factory => :li_line_item
end
end
然后,您的测试中可以覆盖这些属性(或者可以保留基线值):
def test_something
store = Factory(:li_store)
li_line_item_store_one = Factory(:li_line_item_store, :store => store)
li_line_item_store_two = Factory(:li_line_item_store, :store => store)
end
通过上述内容,您现在拥有两个具有不同订单项和同一商店的li_line_item_store实例。