sql >> Databasteknik >  >> RDS >> Mysql

Min app får åtkomst till en fjärrdatabas. Hur kör jag enhetstester effektivt?

TL;DR:Använd nulldb och en testmedveten överordnad klass

Använd nulldb när du testar och den riktiga db annars. Så här gör du:

Inkludera först detta i din Gemfile:

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

och gör sedan den vanliga bundle install

Definiera en basklass för alla modeller som backas upp i den externa databasen:

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

  def readonly?; true; end
end

Sedan ärver alla externa modeller från ExternalModel (jag borde ha gjort detta från början):

class ExternalUser < ExternalModel
  ...
end

När den körs i en testmiljö försöker den inte ansluta till den externa tabellen. Naturligtvis kommer försök att få åtkomst till en instans av ExternalUser att misslyckas, men du kan selektivt upprätta en anslutning till den externa databasen under integrationstestning, eller på annat sätt stubba eller låtsasreferenser till den externa modellen.

Viktigast av allt är att alla mina test går riktigt fort nu.




  1. Finns det något sätt att komma åt föregående radvärde i en SELECT-sats?

  2. Hur man tar bort rader från tre tabeller - frågefel

  3. Kan Mysql dela en kolumn?

  4. Maximera effektiviteten av databasfrågor för MySQL - del två