我试图使用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为其他事情创建测试数据,因此想要使用它为测试中的临时表创建测试数据是一个很自然的扩展。
发布于 2013-08-26 16:11:13
一位同事教我怎么做。您必须重写“initialize_with”,并使用特殊的“属性”变量来完成工作。
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
endhttps://stackoverflow.com/questions/18363374
复制相似问题