sql >> Databáze >  >> RDS >> Mysql

Moje aplikace přistupuje ke vzdálené databázi. Jak mohu efektivně spustit testy jednotek?

TL;DR:Použijte nulldb a nadřazenou třídu s vědomím testování

Při testování použijte nulldb a jinak skutečnou db. Zde je postup:

Nejprve to zahrňte do svého Gemfile:

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

a poté proveďte obvyklou bundle install

Definujte základní třídu pro všechny modely, které jsou zálohovány v externí databázi:

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

  def readonly?; true; end
end

Poté všechny externí modely zdědí z ExternalModel (měl jsem to udělat od začátku):

class ExternalUser < ExternalModel
  ...
end

Při spuštění v testovacím prostředí se nepokusí připojit k externí tabulce. Pokusy o přístup k instanci ExternalUser samozřejmě selžou, ale během testování integrace můžete selektivně navázat spojení s externí databází nebo jinak zablokovat nebo zesměšnit odkazy na externí model.

A co je nejdůležitější, všechny mé testy nyní běží opravdu rychle.




  1. Chyba vložení JDBC

  2. Vícenásobné spojení s SQLAlchemy

  3. Jak obnovit databázi Sqlite po zálohování Androidu

  4. Uložená procedura mysql:použití deklarovaných proměnných v příkazu limit vrátí chybu