私はrspec(2.12.0)とmysqlの2つのデータベース接続を持つdatabase_cleaner(0.9.1 f4b44bb)を使ってrails3.2.10アプリケーションをテストしました。
これらは同様database.ymlの何かに設定されています
test:
...
database: my_app_test
test_my_second_connection:
...
database: my_second_connection_test
第二のデータベースを確立する接続でモデルクラスに接続されています。
私は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
を。
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
私はあなたが解決策を考え出す願っています:テスト実行中に戦略を変更するために、このような私のスペックでdb_truncate =>真と設定:だから私は、メタ情報を追加する必要がありました昨年私たちはこの問題に取り組んでいました。試行錯誤の繰り返しがあり、最終的には完全に乱雑なハックでした。 – fguillen
@fguillen詳細に行くことができますか?あなたがそれをしたことを聞いてうれしく思います。 – HannesFostie
私が言ったように、それは覚えにくい難解なハックでした。今、私はプロジェクトの実際の状態を見ていて、 'test_helper.rb'メソッドを多くの 'ModelName.destroy_all' :) – fguillen