首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在初始定义后添加FactoryGirl工厂

在初始定义后添加FactoryGirl工厂
EN

Stack Overflow用户
提问于 2013-08-21 16:54:18
回答 1查看 161关注 0票数 0

我试图使用FactoryGirl编写一个测试,并希望为基于输入参数生成的类创建一个工厂。因此,在我的setup块中,我尝试了这样的方法:

代码语言:javascript
复制
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为其他事情创建测试数据,因此想要使用它为测试中的临时表创建测试数据是一个很自然的扩展。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-26 16:11:13

一位同事教我怎么做。您必须重写“initialize_with”,并使用特殊的“属性”变量来完成工作。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18363374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档