我正在尝试使用FactoryGirl编写测试,并希望为基于输入参数生成的类创建工厂。所以在我的setup
块中,我尝试过这样的事情:
setup do
FactoryGirl.define do
factory :my_table_1, :class => MyTable.create_subclass(1) do
my_table_traits
end
end
end
其中MyTable.create_subclass
返回使用参数(MyTable
构建的MyTable
的子类,正如您可能猜到的那样,是ActiveRecord
类。
但这不起作用。我发现如果我添加了对FactoryGirl.find_definitions
的调用,但这会导致重复的定义错误。我也尝试将define
更改为modify
,但似乎无法添加工厂,只修改现有工厂。
如何在测试运行时添加工厂?或者,更好的是,是否有另一种方法可以为动态创建的类设置此工厂,该类在测试运行之前甚至不存在?
上下文
MyTable
是最终表格数据将被加载到。在处理过程中,我创建了临时表来加载数据,以便在它加载到真实表之前对其进行分阶段。这些临时表由MyTable
的子类表示,这些子类是基于参数动态生成的。这个测试的目的是验证我们在完成将它们分级到子类/临时表之后正确地将数据插入MyTable
。
由于我已经使用FactoryGirl为其他事物创建测试数据,因此在此测试中使用它来为临时表创建测试数据是一种自然的扩展。
答案 0 :(得分:0)
一位同事告诉我该怎么做。你必须覆盖'initialize_with'并使用特殊的'attributes'变量来完成工作。
factory :my_table_temp_loading_table, :class => ActiveRecord::Base do
initialize_with do
MyTable.create_subclass(attributes[:subclass_id]).new(attributes)
end
my_table_traits
end