TL;DR:Gunakan nulldb dan kelas induk yang peka terhadap pengujian
Gunakan nulldb saat Anda menguji dan db asli sebaliknya. Begini caranya:
Pertama, sertakan ini di Gemfile Anda:
group :development, :test do
gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
end
dan kemudian lakukan bundle install
seperti biasa
Tentukan kelas dasar untuk semua model yang didukung dalam database eksternal:
class ExternalModel < ActiveRecord::Base
if Rails.app.test?
establish_connection(:adapter => :nulldb)
else
establish_connection(:myapp)
end
def readonly?; true; end
end
Kemudian semua model eksternal mewarisi dari ExternalModel (saya seharusnya melakukan ini dari awal):
class ExternalUser < ExternalModel
...
end
Saat dijalankan di lingkungan pengujian, itu tidak akan mencoba menyambung ke tabel eksternal. Tentu saja, upaya untuk mengakses instance ExternalUser akan gagal, tetapi Anda dapat secara selektif membuat koneksi dengan database eksternal selama pengujian integrasi, atau referensi stub atau tiruan ke model eksternal sebaliknya.
Yang terpenting, semua pengujian saya berjalan sangat cepat sekarang.