sql >> Database teknologi >  >> RDS >> Mysql

Min app har adgang til en ekstern database. Hvordan kører jeg enhedstests effektivt?

TL;DR:Brug nulldb og en test-bevidst overordnet klasse

Brug nulldb når du tester og den rigtige db ellers. Sådan gør du:

Først skal du inkludere dette i din Gemfile:

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

og foretag derefter den sædvanlige bundle install

Definer en basisklasse for alle modeller, der er sikkerhedskopieret i den eksterne database:

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

  def readonly?; true; end
end

Så arver alle de eksterne modeller fra ExternalModel (det burde jeg have gjort fra starten):

class ExternalUser < ExternalModel
  ...
end

Når den køres i et testmiljø, forsøger den ikke at oprette forbindelse til den eksterne tabel. Selvfølgelig vil forsøg på at få adgang til en forekomst af ExternalUser mislykkes, men du kan selektivt etablere en forbindelse med den eksterne database under integrationstestning, eller på anden måde stubbe eller falske referencer til den eksterne model.

Det vigtigste er, at alle mine test kører virkelig hurtigt nu.




  1. MySQL Query ORDER BY visse værdier før andre

  2. psycopg2 lækker hukommelse efter stor forespørgsel

  3. Postgres vinduesfunktion lag() tilsvarende forespørgsel i MySQL

  4. SQL gruppe efter og min (MySQL)