TL;DR:Brug nulldb og en test-bevidst overordnet klasse
Brug nulldb når du tester og den rigtige db ellers. Sådan gør du:
Først skal du inkludere dette i din Gemfile:
group :development, :test do
gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
end
og foretag derefter den sædvanlige bundle install
Definer en basisklasse for alle modeller, der er sikkerhedskopieret i den eksterne database:
class ExternalModel < ActiveRecord::Base
if Rails.app.test?
establish_connection(:adapter => :nulldb)
else
establish_connection(:myapp)
end
def readonly?; true; end
end
Så arver alle de eksterne modeller fra ExternalModel (det burde jeg have gjort fra starten):
class ExternalUser < ExternalModel
...
end
Når den køres i et testmiljø, forsøger den ikke at oprette forbindelse til den eksterne tabel. Selvfølgelig vil forsøg på at få adgang til en forekomst af ExternalUser mislykkes, men du kan selektivt etablere en forbindelse med den eksterne database under integrationstestning, eller på anden måde stubbe eller falske referencer til den eksterne model.
Det vigtigste er, at alle mine test kører virkelig hurtigt nu.