2012-07-28 47 views
40

当您的开发包和测试块中包含factory_girl_rails gem时,rails将在生成模型时自动生成工厂。您的模型创建完成后,FactoryGirl能否生成工厂?

您的模型生成后有没有办法生成工厂?


Eduardo Santana's ANSWER SHOULD BE CORRECT

+0

正是你的意思与“生成”什么宝石?你必须明确定义和调用它们。 – iltempo 2012-07-28 15:54:18

+0

@iltempo - 我的意思是当你使用“factory_girl_rails”gem,当你通过命令生成你的模型为“rails g model User first_name:string”时......这个模型的工厂是自动生成的,就像一个工装供测试用。我想知道是否有模型创建后使用生成器钩子的方法。 – GuiDoody 2012-07-28 17:45:43

回答

18

--fixture-replacement选项会让你告诉Rails什么产生构建测试数据。您可以在config/application.rb文件中设置此为默认情况下,像这样:

config.generators do |g| 
    g.fixture_replacement :factory_girl 
end 
+0

这就是诀窍!当你阅读文档时,你会发现这很神奇。 :) – GuiDoody 2012-07-29 20:17:20

+15

这是如何回答这个问题的?模型创建后它如何生成工厂? – Emil 2013-01-24 09:16:24

+1

请参阅下面的user2040729答案。 – 2013-03-03 18:34:52

121

第一件事,看看源项目,了解它是如何实现的:

https://github.com/thoughtbot/factory_girl_rails/blob/master/lib/generators/factory_girl/model/model_generator.rb

之后,试图猜测它是如何工作:

rails g factory_girl:model Car name speed:integer 

结果是:

create test/factories/cars.rb 

和内容:

# Read about factories at https://github.com/thoughtbot/factory_girl 

FactoryGirl.define do 
    factory :car do 
    name "MyString" 
    speed 1 
    end 
end 

记住,当你使用导轨克,你可以随时撤消,护栏剐

rails d factory_girl:model Car name speed:integer 
+8

这应该是正确的答案,因为它回答了关于如何为已经创建的模型生成工厂的具体问题。常见的情况是将现有的导轨应用程序与默认灯具切换到使用FactoryGirl – 2013-03-03 18:20:12

+1

,您甚至不必猜测它是如何工作的,rails g factory_girl:model --help会告诉你如何。 – 2013-06-23 22:44:22

+0

我的模特甚至被称为“车”!是!!! – 2016-04-27 23:15:12

2

这不是一个答案,但因为我不能发表评论然而: 我认为你可以用它来解决你的问题的一部分。您可以使用名为schema_to_scaffold的gem来生成factory_girl:model命令字符串。它输出:

轨产生factory_girl:型号用户FNAME:字符串LNAME:字符串bdate:日期电子邮件:字符串encrypted_pa​​ssword:字符串

从schema.rb或重命名的schema.rb。

检查herehere

0

这里有一些很好的答案,但另一种选择是使用stepford。对于一些使用具有外键约束的模式的项目,deep_ *方法等可能有所帮助,并且这是通过命令行生成工厂的简单方法。

相关问题