0

我正在尝试使用 FactoryGirl 编写测试,并希望为基于输入参数生成的类创建一个工厂。所以在我的setup街区我尝试了这样的事情:

setup do
  FactoryGirl.define do
    factory :my_table_1, :class => MyTable.create_subclass(1) do
      my_table_traits
    end
  end
end

whereMyTable.create_subclass返回MyTable使用参数构建的子类(MyTable正如您可能猜到的,是一个ActiveRecord类)。

但这不起作用。我发现如果我添加了对 的调用FactoryGirl.find_definitions,但这会导致重复的定义错误。我也尝试更改definemodify,但这似乎无法添加工厂,只能修改现有工厂。

测试运行时如何添加工厂?或者,更好的是,是否有另一种方法可以为在测试运行之前甚至不存在的动态创建的类设置这个工厂?

语境:

MyTable是最终表数据将被加载到。在处理过程中,我创建临时表来加载数据,以便在将数据加载到实际表之前将其暂存。这些临时表由MyTable基于参数动态生成的子类表示。MyTable该测试的目的是验证我们在子类/临时表中完成暂存数据后是否正确插入数据。

由于我已经使用 FactoryGirl 为其他事物创建测试数据,因此想要使用它为该测试中的临时表创建测试数据是一种自然的扩展。

4

1 回答 1

0

一位同事向我展示了如何做到这一点。您必须覆盖“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
end
于 2013-08-26T16:11:13.660 回答