2013-01-14 53 views
2

我想填充我的rails測試數據庫並遇到問題。在rails中使用測試數據庫

我有一個腳本,我用它來休息,生成和填充我的發展數據庫工作沒有問題。基本上像

namespace :db do 
    desc "Fill database with sample data" 
    task populate: :environment do 
     Rake::Task['db:reset'].invoke 
     --Create all my dummy data here--- 
    end 
    end 
end 

我然後運行命令:

bundle exec rake db:populate 
bundle exec rake db:test:prepare 

第一命令重置並填充使用上述耙任務我的數據庫,但第二個命令只重新創建我的數據結構和不填充數據。

我這樣做是爲了讓一些RSPec測試可以訪問 - 但我想知道我是否正在接近這個錯誤?我的TDD測試數據庫中是否應該有任何測試數據(僅限結構)?應該所有的東西總是跑掉燈具?

回答

3

根據我的經驗,最好不要依賴運行rake任務或使用任何其他外部過程來填充測試數據。您應該在測試中自行加載任何數據,並在spec/support中創建助手以避免重複。

我已經看到加載測試數據的各種策略:放置在lib中的定製種子類,固定裝置(雖然固定裝置可能會變脆並且在某些情況下很痛)以及更重量級的解決方案,如factory_girl_rails和製造寶石,僅舉幾例。

至於db:test:prepare,它只是「檢查未決的遷移並加載測試模式」,根據Rails指南;沒有實際的數據被加載。

http://guides.rubyonrails.org/testing.html#preparing-your-application-for-testing

希望幫助!

+0

正是這樣打算的基礎 - 謝謝! – cman77

1

但我想知道如果我不正確地接近?我的 在我的TDD測試數據庫中是否有任何測試數據(僅限結構)? 應該所有的東西總是從燈具運行而不是?

一般來說,你的測試數據庫應該是空的 - 如果你的測試數據庫被填充,而且在測試之間沒有清理,你可以根據測試的順序打開不同的測試結果。

在運行之前,您可以使用固定裝置或更常見的工廠來爲每個測試填充數據。燈具會從你的燈具文件中填充整個數據庫,因此對於每次測試,你都會填充大量不必要的數據。通過工廠,您可以指定要在測試本身中填充的數據(特定數據和相關記錄由您的工廠定義來處理)。

幾個流行的工廠是factory_girl:https://github.com/thoughtbot/factory_girl和機械師:https://github.com/notahat/machinist

你也將要像database_cleaner:https://github.com/bmabey/database_cleaner - 所以你用乾淨的石板開始測試database_cleaner需要每次測試之間擦拭你的數據庫的護理。

這裏有一個railscast:http://railscasts.com/episodes/158-factories-not-fixtures與掌握工廠

+0

感謝您的反饋,我會研究database_cleaner。 – cman77

+0

沒問題,樂意幫忙!如果你有興趣閱讀更多關於這方面的知識,Rails Test Prescriptions(http://www.amazon.com/Rails-Test-Prescriptions-Pragmatic-Programmers/dp/1934356646)涵蓋了工廠,以及相當好的測試概述rails應用程序。 –

+0

太好了 - 一直在尋找那樣的東西。還享受RSPEC Peepcode系列。後續問題 - 我應該看到我的FactoryGirl對象的結果出現在我的測試數據庫中嗎?例如,如果我運行'let(:user){FactoryGirl.create(:user)}',實際上我的測試數據庫中似乎沒有創建任何東西。 – cman77

相關問題