Mysql
 sql >> база данни >  >> RDS >> Mysql

Моето приложение осъществява достъп до отдалечена база данни. Как да провеждам ефективно модулни тестове?

TL;DR:Използвайте nulldb и родителски клас, който знае за тест

Използвайте nulldb, когато тествате, и реалния db в противен случай. Ето как:

Първо, включете това във вашия Gemfile:

group :development, :test do
  gem 'activerecord-nulldb-adapter', :git => 'git://github.com/nulldb/nulldb.git'
end

и след това направете обичайната bundle install

Дефинирайте базов клас за всички модели, които се поддържат във външната база данни:

class ExternalModel < ActiveRecord::Base
  if Rails.app.test?
    establish_connection(:adapter => :nulldb)
  else
    establish_connection(:myapp)
  end

  def readonly?; true; end
end

Тогава всички външни модели наследяват от ExternalModel (трябваше да направя това от самото начало):

class ExternalUser < ExternalModel
  ...
end

Когато се изпълнява в тестова среда, той няма да се опитва да се свърже с външната таблица. Разбира се, опитите за достъп до екземпляр на ExternalUser ще бъдат неуспешни, но можете избирателно да установите връзка с външната база данни по време на интеграционно тестване или в противен случай заглушени или фалшиви препратки към външния модел.

Най-важното е, че всичките ми тестове вървят много бързо сега.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Внедряване на база данни с най-гледани функции

  2. Как да получите името на колоната на резултата от най-малка функция?

  3. Ляво присъединяване с отделна заявка в Laravel

  4. Съставни ключове на MySql и нулеви стойности

  5. Изберете публикация, която няма конкретен маркер