2012-07-28 77 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_ *方法等可能有所幫助,並且這是通過命令行生成工廠的簡單方法。

相關問題