rspec (2.12.0) でテストされた rails3.2.10 アプリケーションがあり、mysql の 2 つのデータベース接続を持つ database_cleaner (0.9.1 f4b44bb) を使用しています。
これらは、database.ymlで次のように設定されます。
test:
...
database: my_app_test
test_my_second_connection:
...
database: my_second_connection_test
2 番目のデータベースは、接続を確立してモデル クラスに接続されます。
database_cleaner のマニュアルに従って、 spec/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 => trueをスペックに追加し、次のような設定を行う必要がありました。
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