TL;DR:Use nulldb e uma classe pai com reconhecimento de teste
Use nulldb quando estiver testando e o db real caso contrário. Veja como:
Primeiro, inclua isso no seu Gemfile:
group :development, :test do
gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
end
e, em seguida, faça a
bundle install
usual Defina uma classe base para todos os modelos suportados no banco de dados externo:
class ExternalModel < ActiveRecord::Base
if Rails.app.test?
establish_connection(:adapter => :nulldb)
else
establish_connection(:myapp)
end
def readonly?; true; end
end
Então todos os modelos externos herdam de ExternalModel (eu deveria ter feito isso desde o início):
class ExternalUser < ExternalModel
...
end
Quando executado em um ambiente de teste, ele não tentará se conectar à tabela externa. É claro que as tentativas de acessar uma instância de ExternalUser falharão, mas você pode estabelecer seletivamente uma conexão com o banco de dados externo durante o teste de integração, ou referências stub ou simuladas ao modelo externo.
Mais importante ainda, todos os meus testes rodam muito rápido agora.