TL; DR:Sử dụng nulldb và lớp cha nhận biết kiểm tra
Sử dụng nulldb khi bạn đang thử nghiệm và sử dụng db thực nếu không. Đây là cách thực hiện:
Đầu tiên, hãy đưa cái này vào Gemfile của bạn:
group :development, :test do
gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
end
và sau đó thực hiện bundle install
thông thường
Xác định lớp cơ sở cho tất cả các mô hình được sao lưu trong cơ sở dữ liệu bên ngoài:
class ExternalModel < ActiveRecord::Base
if Rails.app.test?
establish_connection(:adapter => :nulldb)
else
establish_connection(:myapp)
end
def readonly?; true; end
end
Sau đó, tất cả các mô hình bên ngoài kế thừa từ ExternalModel (lẽ ra tôi phải làm điều này ngay từ đầu):
class ExternalUser < ExternalModel
...
end
Khi chạy trong môi trường thử nghiệm, nó sẽ không cố gắng kết nối với bảng bên ngoài. Tất nhiên, các nỗ lực truy cập một phiên bản của ExternalUser sẽ không thành công, nhưng bạn có thể thiết lập kết nối một cách chọn lọc với cơ sở dữ liệu bên ngoài trong quá trình kiểm tra tích hợp hoặc tham chiếu sơ khai hoặc mô phỏng đến mô hình bên ngoài.
Quan trọng nhất, tất cả các bài kiểm tra của tôi hiện chạy rất nhanh.