有沒有辦法阻止Rails在運行測試之前清除測試數據庫?我想使用我的生產數據庫的副本進行測試,因此我需要防止rails每次清除數據。Ruby on Rails - 測試數據庫
有相當多的數據,所以我想盡可能避免使用燈具,因爲我假設每次都需要很長時間來填充數據庫。
謝謝, 邁克
有沒有辦法阻止Rails在運行測試之前清除測試數據庫?我想使用我的生產數據庫的副本進行測試,因此我需要防止rails每次清除數據。Ruby on Rails - 測試數據庫
有相當多的數據,所以我想盡可能避免使用燈具,因爲我假設每次都需要很長時間來填充數據庫。
謝謝, 邁克
您可以通過運行測試,避免手動
ruby -Itest test/unit/some_test.rb
這是耙的任務,做測試分貝娛樂(你可以手動像這樣運行它)
rake db:test:prepare
但我的建議是你做錯了。 測試中的一般想法是,您知道數據庫的狀態,因此知道對函數的期望。
例如。
test "search_by_name" do
expected = User.all.select{|u| u.name =~ /arthur/i}
assert_equal expected, User.search_by_name("Arthur")
end
是一個很好的測試 但是,如果你不知道該數據庫的狀態,你怎麼知道有一個阿瑟?
上面的測試會通過三種不好的情況;
所以它更好地創建一個虛假的現實, 我們知道數據庫的狀態。
我們想;
更好的測試,假設db是空的,並且使用factory girl,可能是。
test "search_by_name" do
expected = [
Factory.create(:user, :name => "Arthur"),
Factory.create(:user, :name => "MacArthur")
]
not_expected = [Factory.create(:user, :name => "Archer")]
assert_equal expected, User.search_by_name("Arthur")
end
這沒有奏效。 ruby -Itest ...命令刪除了我的表中的數據。架構保持不變,但數據已被刪除。但是,關於已知數據的觀點很好。我現在正在使用測試進行用戶界面驗證,因此我想使用生產數據,以便查看(並測試)用戶看到的內容。但更好的辦法可能是獲得我需要的表格,創建固定裝置/種子並以這種方式進行。謝謝你的回答,我很感激 – hoitomt
測試的關鍵在於讓數據庫充滿可預測的數據,這些數據不會因一次測試而改變。通過使用生產數據,您將失去這一優勢。我真的會考慮用'FactoryGirl'來爲你模擬數據庫數據。 – iwasrobbed