Ответ 1
У меня есть приложение rails3.2.10, протестированное с помощью rspec (2.12.0) и использующее database_cleaner (0.9.1 f4b44bb), имеющее два подключения к базе данных для mysql.
Они установлены в database.yml что-то вроде:
test:
...
database: my_app_test
test_my_second_connection:
...
database: my_second_connection_test
Вторая база данных подключается в классе модели с установлением соединения.
Мне удалось использовать следующие параметры в файле spec/spec_helper.rb в соответствии с руководством в файле database_cleaner:
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