2012-07-10 68 views
1

我正試圖將一個使用Fixtures的Rails 3應用程序移植到Factory Girl中,並且不完全確定正確的數據庫方法。 (請注意,我正在使用Rspec進行測試)。用Factory Girl測試數據庫的正確方法

我有一個seeds.db是有需要我的功能測試和集成測試數據,但是當涉及到,比如說,我Role模型的模型試驗,這個種子數據可能得到的方式,如果我想使一個來自工廠的管理員角色,但是我的種子在數據庫中已經有一個管理員角色,名稱列必須是唯一的。此外,我在這些模型測試中創建的任何數據都可能會干擾我的集成測試,因爲我將獲得額外的數據,我不期待。

那麼幾個問題,我想:

  1. 什麼來處理我的單元測試數據庫的正確方法?我需要其他測試的種子數據,但他們現在似乎正在'擋道'。我是否被迫使用序列來創建獨特的數據,或者是否有一種方法僅僅爲功能和集成測試加載種子數據?

  2. 是否有適當的方法來清除工廠數據,以便它只是功能和集成測試的種子數據?

現在是Factory Girl的完全新功能,只是想正確地學習它,而不是闖入它。感謝您的任何意見。

回答

3

在測試中處理數據庫數據的「正確」方式是在每次測試運行前確保它是乾淨且一致的。所以很多人(包括我自己)都不會種子數據庫,而是使用工廠。

對數據庫進行播種也會使得更難以瞭解正在發生的事情,這會導致您做出許多次錯誤結果的假設。相反,使用工廠來添加測試所需的數據。這是額外的工作一點點,但它是值得的,因爲:

  1. 刪除你的假設
  2. ,確保乾淨,一致的測試環境
  3. 保持所有數據在測試
測試權

另外,rspec有before(:each)before(:all)因此您可以在運行測試之前設置您的數據。所以這不是多餘的工作。

但是有一件事可能會讓你起初是因爲我通常只是在after(:all)塊中手動刪除,rspec不會在測試運行之間清除數據庫。所以拇指我用的規則 - 無論是在before(:all)創建應在after(:all)

許多人被取出,也使用database_cleaner寶石本,但到目前爲止我還沒有需要它。

+0

感謝您的回答!我會嘗試去工廠,但是我的項目領導意味着我們需要種子,雖然他沒有真正具體的原因,所以希望我可以解決它。 – Naty722 2012-07-10 23:46:38

相關問題