我有一個特定的測試,我想編寫它來檢查迴歸。我已經繼承了一個沒有單元測試的Rails環境,並且很少有人通過外部(Rails之外)的方式將其放入數據庫。使用特定的RAILS_ENV進行單個單元測試
單元測試將遍歷數據庫中的特定模型並呈現視圖,確保每個實例仍可在該視圖中正確呈現。我想運行一個開發數據庫實例,通常是生產數據庫(MySQL)的克隆。
數據太大,無法放入燈具中...我想使用'test'sqlite數據庫保留其餘的測試。
所以 - 有沒有辦法來覆蓋單個測試哪個數據庫Rails連接到?
我正在使用Rails 3.2.22。
編輯:
基於Babar's answer,我使用的是:
class MyTest < ActionController::TestCase
def setup
@controller = MyController.new
end
test "should successfully render all" do
begin
connection_config = ActiveRecord::Base.connection_config()
ActiveRecord::Base.establish_connection('development')
MyModel.find_each do |i|
print "#{i.id} - #{i.name}\n"
get(:show, {'name' => i.name})
end
ensure
ActiveRecord::Base.establish_connection(connection_config)
# or ActiveRecord::Base.establish_connection(ENV['RAILS_ENV'])
end
end
end
但我在試圖回滾拆解得到一個異常。我認爲這是因爲測試最初是圍繞一個事務進行的,而且由於我交換了數據庫,連接現在已關閉,我們不再處於事務中。
什麼是最直接的解決方法?
編輯:
添加這看起來是最簡單的:
def setup
@controller = DashboardController.new
@use_transactional_fixtures = false
end
您是否正在使用Minitest? Rspec的?還有別的嗎?我假設你希望這個測試總是使用這個特定的環境,而不是隻在命令行執行一個RAILS_ENV = [x]命令? – tirdadc
我希望此特定測試始終使用特定的環境,而不管RAILS_ENV設置爲什麼。 ...實際上我的test_helper.rb具有'ENV [「RAILS_ENV」] =「test」'set,所以我相信RAILS_ENV不能在命令行上覆蓋? (我可以。) – rrauenza
我似乎有我的Gemfile rspec 2.14.1,但我想我使用minitest - 測試類派生自Test :: Unit :: TestCase,ActiveSupport :: TestCase, ActionView :: TestCase,ActionController :: TestCase – rrauenza