我发现这个错误让我花了太长时间才能找到。
我有这个:
FactoryGirl.define do
factory :global_list do
list_id FactoryGirl.create(:user).liked_items_list.id
end
end
但只是包裹在一个区块中:
FactoryGirl.define do
factory :global_list do
list_id { FactoryGirl.create(:user).liked_items_list.id }
end
end
所以我知道在第二次调用中,阻塞导致它在运行像FactoryGirl.create(:global_list)这样的实际调用之前不会运行;我认为这已经过去并通过FG转换为proc。还有其他实际差异吗?我希望有一种方法可以在详细模式下运行它们。
thx任何见解
答案 0 :(得分:1)
两种情况之间的本质区别是:
在第一种情况下(无块),在加载工厂时会评估list_id表达式,而不再重复。加载工厂时生成的list_id将用于工厂创建的所有对象。因此,所有global_list对象都具有相同的list_id。
在第二种情况下(带有块),只要调用工厂(例如,调用build(:global_list),create(:global_list)),就会计算list_id表达式。如果表达式产生的list_id发生变化,那么不同的工厂对象将具有不同的list_id。