sql >> Database >  >> RDS >> Mysql

Mijn app heeft toegang tot een externe database. Hoe voer ik unittesten efficiënt uit?

TL;DR:gebruik nulldb en een testbewuste bovenliggende klasse

Gebruik nulldb wanneer u aan het testen bent en anders de echte db. Dit is hoe:

Neem dit eerst op in je Gemfile:

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

en doe dan de gebruikelijke bundle install

Definieer een basisklasse voor alle modellen die worden ondersteund in de externe database:

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

  def readonly?; true; end
end

Dan erven alle externe modellen van ExternalModel (ik had dit vanaf het begin moeten doen):

class ExternalUser < ExternalModel
  ...
end

Wanneer het in een testomgeving wordt uitgevoerd, zal het niet proberen verbinding te maken met de externe tabel. Pogingen om toegang te krijgen tot een instantie van ExternalUser zullen natuurlijk mislukken, maar u kunt selectief een verbinding tot stand brengen met de externe database tijdens integratietests, of anders stub of mock verwijzingen naar het externe model.

Het belangrijkste is dat al mijn tests nu erg snel verlopen.




  1. Tabellen weergeven in de huidige database met PostgreSQL

  2. Hoe dubbele vermeldingen verwijderen?

  3. hoe een ingewikkeld sql-commando te implementeren

  4. Parameter Snuiven Primer: