2013-04-03 44 views
8

我已經爲測試Rails項目建立了一些精心設計的FactoryGirl工廠定義,爲此他們工作得很好。如何使用FactoryGirl工廠構建開發數據庫?

我現在想用一個腳本(紅寶石,耙,無論...)有大集合的有效的,正確的相關記錄來填充Rails開發數據庫中使用相同的定義。

我敢肯定,這是一個共同的任務,但無法找到一個有用的參考。

什麼是最佳實踐?如何進行?

說出工廠都在spec/factories.rb。接下來是什麼?謝謝。

更新

不斷掙扎。試試這是一個rake任務。

require 'factory_girl' 
require 'spec/factories' 

namespace :db do 
    desc "Fill database with trial data" 
    task :populate => :environment do 
    Rake::Task['db:reset'].invoke 
    50.times do |n| 
     # Make a consistent set of related records. 
     team = FactoryGirl.create(:team, :completed) 
     team.members << FactoryGirl.create(:member) 
     FactoryGirl.create(:design, :team => team) 
    end 
    end 
end 

唉,這不能找到我的factories.rb

rake aborted! 
cannot load such file -- spec/factories 

在其他地方一個項目根目錄相對路徑需要工作正常。什麼是祕密握手?

+1

這通常是種子文件的工作。是否有理由不想使用種子填充數據庫? –

+0

從未聽說過種子。你能提供一個參考嗎? (大部分時間學習Rails看起來像是尋找清道夫...) – Gene

+1

@Gene http://railscasts.com/episodes/179-seed-data –

回答

1

正如我在我的評論中提到,這是典型的種子數據的工作。

namespace :db do 
    task :seed => :environment do 
    env_seed_file = File.join(Rails.root, 'db', 'seeds', "#{Rails.env}.rb") 
    load(env_seed_file) if File.exist?(env_seed_file) 
    end 
end 

這將使您創建爲每個環境文件的能力(即DB:如果你想在這個數據只被接種到開發數據庫,​​你可以通過做這樣的事情修改seed Rake任務/seeds/development.rb)。您還可以使用像seedbank這樣的寶石,它可以爲您提供環境特定的種子文件以及Rails中已有內容的一些其他補充。

+0

謝謝。正如你所說的,在'seeds.rb'文件中,我有完整的環境加載路徑,因此FactoryGirl和我的工廠可以正常工作。我只是將代碼封裝在'if Rails.env =='development''中,以確保它不會在非開發數據庫中生成隨機記錄。如果出現更復雜的要求,我會在稍後使用更一般的解決方案。 – Gene

+0

我只是在找到如何用factory_girl生成測試數據時找到了這個答案。爲數據庫添加測試數據通常不用於播種數據庫,而是在開發和生產中播種初始記錄。 (見[這裏](http://railscasts.com/episodes/179-seed-data?view=asciicast)和[這裏](http://www.xyzpub.com/en/ruby-on-rails/3.2 /seed_rb.html)) –

0

@Gene 您已接近解決這個難題。我認爲你離這一條路是一條路。 我沒有使用RSpecs,路徑可能略有不同,但你有一般的想法。

namespace :db do 
    desc "Fill database with trial data" 
    task :populate => :environment do 
    require 'factory_girl' 
    require Rails.root + 'spec/factories' 

    Rake::Task['db:reset'].invoke 
    Rake::Task['db:seed'].invoke 
    50.times do |n| 
     # Make a consistent set of related records. 
     team = FactoryGirl.create(:team, :completed) 
     team.members << FactoryGirl.create(:member) 
     FactoryGirl.create(:design, :team => team) 
    end 
    end 
end 

我只精確您需要的工廠文件路徑,我還加了耙分貝:您復位後的種子。

的DB的種子是不是能夠讓你在數據庫開發時間,但引導用正確的信息,新的應用程序能夠正常工作。即。創建管理用戶和默認狀態

相關問題