2012-01-05 33 views
0

雖然大多數人希望他們的數據庫在單元/功能測試的運行之間爲空,但我正在調試一個問題,並發現它不方便,而且令人驚訝的是我的測試數據庫在運行測試之前和之後都是空的。即使我在設置和拆卸中放置了一些東西來打印出特定表格的大小,它在安裝時總是爲0,有時在拆卸時大於0。爲什麼我的測試數據庫在運行rails測試之前和之後都是空的?

這是什麼對我來說?我沒有固定裝置(我已經在test_helper中註釋了默認的「fixtures:all」),我使用簡單的單元/功能測試來擴展ActiveSupport :: TestCase(沒有RSpec或類似的東西)。自生成rails項目以來,我沒有添加任何自定義配置/設置。

我正在運行Rails 3.0.9和Ruby 1.8.7。

歡迎任何想法!

+0

這將有助於看到一些實際的代碼,而不僅僅是一個代碼的說明。 – 2012-01-05 21:20:27

回答

3

你可以通過設置use_transactional_fixturesfalse禁用此行爲:

class MyTest < ActiveSupport::TestCase 
    self.use_transactional_fixtures = false 
end 
+0

謝謝,就是這樣。看起來這是從一個快速的互聯網搜索Rails 1.0以來。奇怪的是,我發現如何刪除運行之間的數據,如果它是默認的很多點擊?...非常感謝解釋,雖然。 – 2012-01-06 22:30:49

0

單元測試需要知道新鮮狀態,這就是數據庫被清除的原因。

防止測試數據庫被擦除非常容易w/RSpec。不確定如何在Rails的內置Test :: Unit內容中執行此操作,但您可能要考慮的一件事是,如果僅用於快速調試目的,則只需使用記錄器並拖動測試日誌即可:

 
Rails.logger.info "\n\nThe value of foo is #{foo}\n\n" 

這將落入test.log中,並把一對夫婦換行,每邊,以方便你看到它在所有其他的東西存在之中。

希望有所幫助。

+0

謝謝,不幸的是,我已經在使用print語句進行調試,並且仍然無法解決出了什麼問題。似乎有一些數據庫不一致,只有偶爾從自動測試運行測試時纔會發生。通過「ruby -Itest ...」從命令行重複運行測試總是可以正常工作。我認爲這與設置一個不止一次運行的父類有關。 – 2012-01-05 21:14:54

+0

我添加了幾個打印語句(只是在不同的地方添加了「puts ...」),並發現它確實是因爲我有class X 2012-01-05 21:20:53

+0

只要我一直在運行,清除運行之間的數據庫一直是Rails的一部分使用它(自1.3x)。聽起來像你可能能夠重新設置你的班級設置,並仍然在業務......? :-) – trevrosen 2012-01-05 22:15:09

相關問題