TL; DR:nulldbとテスト対応の親クラスを使用
テストする場合はnulldbを使用し、それ以外の場合は実際のdbを使用します。方法は次のとおりです。
まず、これをGemfileに含めます:
group :development, :test do
gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
end
次に、通常のbundle install
を実行します
外部データベースにバックアップされているすべてのモデルの基本クラスを定義します。
class ExternalModel < ActiveRecord::Base
if Rails.app.test?
establish_connection(:adapter => :nulldb)
else
establish_connection(:myapp)
end
def readonly?; true; end
end
次に、すべての外部モデルがExternalModelから継承します(最初からこれを行う必要があります):
class ExternalUser < ExternalModel
...
end
テスト環境で実行すると、外部テーブルへの接続は試行されません。もちろん、ExternalUserのインスタンスにアクセスしようとすると失敗しますが、統合テスト中に外部データベースとの接続を選択的に確立するか、それ以外の場合は外部モデルへの参照をスタブまたはモックすることができます。
最も重要なことは、すべてのテストが非常に高速に実行されるようになったことです。