Railsで複数データベース使用時のDatabaseCleanerの設定

前回のRailsで複数データベースを扱うに関連して。

Rspecとかでテストを書くときに作成したテストデータを、テストを実行するたびに削除してくれるgemとして、DatabaseCleanerがある。複数データベースを扱う際は、それ毎に設定を記述しなければいけないので、その設定。

例えば、こんなモデルがあるとすると

class Hoge < ActiveRecord::Base
  database = YAML::load(IO.read('config/database2.yml'))
  establish_connection(database[Rails.env])
end

DatabaseCleanerでは、直接modelを指定できるので以下のように書ける。

RSpec.configure do |config|
  ...

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)

    DatabaseCleaner[:active_record,{:model => Hoge}].strategy = :transaction
    DatabaseCleaner[:active_record,{:model => Hoge}].clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.start
    DatabaseCleaner[:active_record,{:model => Hoge}].start
  end

  config.after(:each) do
    DatabaseCleaner.clean

    DatabaseCleaner[:active_record,{:model => Hoge}].clean
  end

  ...