0

マスターの代わりにスレーブ データベースをクエリする resque バックグラウンド ジョブをセットアップしました。私のresqueクラスでは、スレーブへの接続を確立するコードを追加し、メソッドの最後で接続を確立解除しました。私の質問は、クエリがメソッド内の特定のデータベースにヒットしていることを rspec でテストするにはどうすればよいですか? 以下のコードサンプル:

 class ResqueJob
  @queue = :resque_job

def self.perform(user_id)
  ActiveRecord::Base.establish_connection(
      :adapter  => "mysql2",
      :host     => "slave_database.com",
      :username => "test",
      :database => "sample"
    )
    user = User.find_by_id(current_user_id)
    #bunch of code in here

  ActiveRecord::Base.clear_active_connections! # Disconnect from slave database
 end

end
4

1 に答える 1

3

原則として、ライブラリ コードの動作をテストするべきではありません。接続を設定したら、クエリを適切なデータベースに送信するのは ActiveRecord 次第です。代わりに、コードがその役割を果たしていることをテストします。

it "sets the database connection to the slave" do
  params = { 
      :adapter  => "mysql2",
      :host     => "slave_database.com",
      :username => "test",
      :database => "sample"
  }
  ActiveRecord::Base.should_receive(:establish_connection).with(params)
  ActiveRecord::Base.should_receive(:clear_active_connections!)
  ResqueJob.perform(user)
end
于 2013-01-16T19:40:51.410 に答える