15

別のメール アプリも接続するセカンダリ DB を使用するメールボックス モデルがあります。これは、使用して呼び出されます

establish_connection :mail_database

さて、ifそれをステートメントでラップして、テスト環境に別の接続を使用することができると思いますが、できれば、「通常の」データベースに既に使用している database_cleaner を使用して、このデータベースをクリーンに保つ方法を考えています。 .

誰かが私を正しい方向に向けてくれることを願っています。

4

2 に答える 2

14

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
于 2013-01-07T14:20:43.387 に答える