TL;DR:use nulldb y una clase principal que tenga en cuenta las pruebas
Use nulldb cuando esté probando y el db real de lo contrario. Así es como:
Primero, incluye esto en tu Gemfile:
group :development, :test do
gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
end
y luego haga la bundle install
habitual
Defina una clase base para todos los modelos que están respaldados en la base de datos externa:
class ExternalModel < ActiveRecord::Base
if Rails.app.test?
establish_connection(:adapter => :nulldb)
else
establish_connection(:myapp)
end
def readonly?; true; end
end
Luego, todos los modelos externos heredan de ExternalModel (debería haber hecho esto desde el principio):
class ExternalUser < ExternalModel
...
end
Cuando se ejecuta en un entorno de prueba, no intentará conectarse a la tabla externa. Por supuesto, los intentos de acceder a una instancia de ExternalUser fallarán, pero puede establecer de forma selectiva una conexión con la base de datos externa durante la prueba de integración, o de lo contrario, referencias simuladas o stub al modelo externo.
Lo más importante es que ahora todas mis pruebas funcionan muy rápido.