我們有一個郵箱模型,它使用另一個郵件應用程序也連接的輔助數據庫。這是使用多個數據庫的測試和database_cleaner
establish_connection :mail_database
現在叫,我想我可以嘗試來包裝在if
語句,因此它使用的測試環境不同的連接,但我想知道我怎麼能保持這個數據庫的清潔,最好使用我們已經用於'常規'數據庫的database_cleaner。
我希望有人能推動我朝着正確的方向前進。
我們有一個郵箱模型,它使用另一個郵件應用程序也連接的輔助數據庫。這是使用多個數據庫的測試和database_cleaner
establish_connection :mail_database
現在叫,我想我可以嘗試來包裝在if
語句,因此它使用的測試環境不同的連接,但我想知道我怎麼能保持這個數據庫的清潔,最好使用我們已經用於'常規'數據庫的database_cleaner。
我希望有人能推動我朝着正確的方向前進。
我有一個rails3.2.10應用程序測試與rspec(2.12.0)和使用database_cleaner(0.9.1 f4b44bb)有兩個數據庫連接的MySQL。
test:
...
database: my_app_test
test_my_second_connection:
...
database: my_second_connection_test
第二個數據庫連接在建立連接的模型類:
這些在database.yml中類似設置。
我能夠根據manual of database_cleaner我規格/ spec_helper.rb使用以下設置文件:
require 'database_cleaner'
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].strategy = :transaction
end
config.before(:each) do
DatabaseCleaner.start
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].start
end
config.after(:each) do
DatabaseCleaner.clean
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].clean
end
end
此外,我必須要使用的測試套件非事務性燈具的某些部分。所以,我不得不添加的元信息:db_truncate =>在我的規格真實和設置像這樣,爲了改變在試運行策略:
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].strategy = :transaction
end
config.before(:each) do
if example.metadata[:db_truncation]
DatabaseCleaner.strategy = :truncation
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].strategy = :truncation
else
DatabaseCleaner.start
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].start
end
end
config.after(:each) do
DatabaseCleaner.clean
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].clean
if example.metadata[:db_truncation]
DatabaseCleaner.strategy = :transaction
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].strategy = :transaction
end
end
一位同事已經找到了這個,但它確實是解決方案。謝謝 – HannesFostie
我有同樣的情況(在Rails 3.2.12和Rspec 2.14.7上)連接到我的一個模型中的第二個數據庫。當我以這種方式設置DatabaseCleaner時,似乎我的所有模型都嘗試連接到第二個數據庫,當然事情失敗了,因爲第二個數據庫中沒有表格 –
@ChristerFernstrom任何運氣都能解決這個問題嗎? –
****set database to clean by database cleaner in rails:-****
config.before(:suite) do
DatabaseCleaner[:active_record, :connection => :test].clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner[:active_record, :connection => :test].strategy = :transaction
end
config.before(:each) do
DatabaseCleaner[:active_record, :connection => :test].start
end
config.after(:each) do
DatabaseCleaner[:active_record, :connection => :test].clean
end
我希望你拿出一個解決方案去年我們正在處理這個問題,並且花了大量的嘗試和錯誤迭代,最終解決方案是一個徹頭徹尾的黑客攻擊。 – fguillen
@fguillen你可以詳談嗎?很高興聽到你是如何做到的 – HannesFostie
正如我所說這是一個非常難以記住的混亂的黑客,現在我看到了項目的實際狀態,我看到他們剛剛完成添加一個'test_helper.rb'方法與一個很多'ModelName.destroy_all' :) – fguillen