1

表在我的Rails應用開發,當我跑我Rspec的測試,我需要截斷在我的測試數據庫所有表中的after(:all)關於我的方式截斷在我的測試數據庫

(這是清理在測試數據庫中的每個表中的所有數據)

接近這一點,我想先得到所有ActiveRecord模式代表在測試數據庫的表,然後爲每個模型,我用delete_all方法來清理每個表。吳丹的是這樣的:

ALL_ACTIVE_RECORD_MODELS.each do |model| 
     model.delete_all 
end 

我有兩個問題問關於這一點:

如何獲得所有活動記錄模式 Rails中在我的RSpec的代碼?

2.我使用一個可以接受的方式截斷在我的測試數據庫中的所有表或不?如果不是,另一種方法是什麼?

+0

作爲經常當它涉及到的東西,你可能要與鐵軌的事,還有爲創業板:https://github.com/bmabey/database_cleaner。 :) – Frost

回答

3

有一個寶石做的正是這個任務稱爲database_cleaner:https://github.com/bmabey/database_cleaner

這將確保一切都從你的數據庫中刪除,但其默認的策略是不刪除的內容,但使用的交易,簡單地回滾每個測試後的變化。

被警告,這可能偶爾會導致一個疑難雜症,因爲您不會看到您的交易執行,因此測試旨在交易的行爲。您可以通過在任何不想使用事務的測試集之前添加self.use_transactional_fixtures = false來解決此問題。但請記住,以後再次清除您的數據。

+0

我的第一個問題呢?儘管如果我使用數據庫清理器,它不是必需的......但我仍然有興趣知道。 –

+0

你可以閱讀你的數據庫模式並推斷它 - 除此之外我恐怕我不知道 –

相關問題