2010-10-16 43 views
1

有沒有辦法在測試過程中使用mysqldump而不是夾具導入數據(rake test:在這種情況下是profile)。從mysql導入夾具數據

我還沒有成功導出mysql數據的yml格式(它工作正常),並將其導入到rails(不起作用,耙任務抱怨格式完整性似乎完好的yml文件)。

其他日子有哪些日子可以輸出/輸入數據或不輸入數據?

+0

我討厭當我問一個關於做某件事的問題時,有人說:「你爲什麼不做別的事呢?」所以我把它留作評論......你有沒有試過用Faker這樣的東西來代替導入實際的數據?您可以添加一個rake任務來在測試數據庫中創建虛擬帳戶。如果你對這樣的事情感興趣,我可以發表如何,但我不想成爲一個普茨,並留下一個答案,而不是實際回答你。 – 2010-10-16 03:35:54

+0

是的,我嘗試了faker ..只是它更容易導入(如果有一種簡單的方法),而不是編寫精確地創建有趣數據的方法。感謝您的評論 – badnaam 2010-10-16 03:39:52

+0

如果您無法正常工作,這並不容易;) – 2010-10-16 03:48:57

回答

0

Mysqldump是一個命令行程序,所以你必須編寫一個rake作業來清除你的數據庫。但我同意Mike B的看法。有一些一般的建議,如「脂肪模型,瘦身控制器」,其涵蓋了來自a railscast的「工廠沒有固定裝置」。工廠的優勢在於,如果您願意,他們可以在每次測試之間回滾數據庫。夾具也有不容易代表關係的缺點,你必須手工創建和維護主鍵/外鍵。這是一種痛苦。

如果我真的必須堅持使用燈具,我不會導入數據來測試。測試你的數據庫超出了你的應用程序的範圍。如果你的應用程序真的依賴於那裏的數據,然後把它放在seeds.rb。但是應用程序數據不需要測試。例如,我真的不在乎表Users中的字段first_name。如果我這樣做,我正在寫數據測試器?

此外,我希望您不會將生產數據轉儲到測試數據庫中,然後再進行測試。這樣做太過分了。

如果你仍然想使用mysqldump和夾具,寫一個rake任務或腳本來做到以下幾點:

  • 首先,用mysqldump轉儲你的數據,你要使用。
  • 將插入語句修剪爲每個表幾行。確保你在那裏有一些關係!
  • 轉換這些行夾具文件或者寫一個腳本做一個mysql命令是這樣的:
    • 的mysql -u DBUSER --password =密碼DBNAME < few_rows_from_mysqldump.sql
  • 運行測試
  • 在few_rows_from_mysqldump.sql中引用的截斷表格

這實質上就是factory_girl之類的事務功能所做的事情。只要知道你會重新發明輪子。

燈具很好用,你只需要手工製作PK/FK。正因爲如此,我通常只用幾行進行測試。除此之外,任何測試超出範圍的數據庫層都是如此。如果您希望確保數據具有某種質量,請在模型中添加「validates_blah_blah」數據庫約束。

希望我沒有像Mike B說的那樣做「做別的事情」。我同意這很煩人。但我也想提醒一下。