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 ...