TL;DR:Použijte nulldb a nadřazenou třídu s vědomím testování
Při testování použijte nulldb a jinak skutečnou db. Zde je postup:
Nejprve to zahrňte do svého Gemfile:
group :development, :test do
gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
end
a poté proveďte obvyklou bundle install
Definujte základní třídu pro všechny modely, které jsou zálohovány v externí databázi:
class ExternalModel < ActiveRecord::Base
if Rails.app.test?
establish_connection(:adapter => :nulldb)
else
establish_connection(:myapp)
end
def readonly?; true; end
end
Poté všechny externí modely zdědí z ExternalModel (měl jsem to udělat od začátku):
class ExternalUser < ExternalModel
...
end
Při spuštění v testovacím prostředí se nepokusí připojit k externí tabulce. Pokusy o přístup k instanci ExternalUser samozřejmě selžou, ale během testování integrace můžete selektivně navázat spojení s externí databází nebo jinak zablokovat nebo zesměšnit odkazy na externí model.
A co je nejdůležitější, všechny mé testy nyní běží opravdu rychle.