TL;DR:gebruik nulldb en een testbewuste bovenliggende klasse
Gebruik nulldb wanneer u aan het testen bent en anders de echte db. Dit is hoe:
Neem dit eerst op in je Gemfile:
group :development, :test do
gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
end
en doe dan de gebruikelijke bundle install
Definieer een basisklasse voor alle modellen die worden ondersteund in de externe database:
class ExternalModel < ActiveRecord::Base
if Rails.app.test?
establish_connection(:adapter => :nulldb)
else
establish_connection(:myapp)
end
def readonly?; true; end
end
Dan erven alle externe modellen van ExternalModel (ik had dit vanaf het begin moeten doen):
class ExternalUser < ExternalModel
...
end
Wanneer het in een testomgeving wordt uitgevoerd, zal het niet proberen verbinding te maken met de externe tabel. Pogingen om toegang te krijgen tot een instantie van ExternalUser zullen natuurlijk mislukken, maar u kunt selectief een verbinding tot stand brengen met de externe database tijdens integratietests, of anders stub of mock verwijzingen naar het externe model.
Het belangrijkste is dat al mijn tests nu erg snel verlopen.