sql >> Base de Datos >  >> RDS >> Mysql

Mi aplicación accede a una base de datos remota. ¿Cómo ejecuto pruebas unitarias de manera eficiente?

TL;DR:use nulldb y una clase principal que tenga en cuenta las pruebas

Use nulldb cuando esté probando y el db real de lo contrario. Así es como:

Primero, incluye esto en tu Gemfile:

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

y luego haga la bundle install habitual

Defina una clase base para todos los modelos que están respaldados en la base de datos externa:

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

  def readonly?; true; end
end

Luego, todos los modelos externos heredan de ExternalModel (debería haber hecho esto desde el principio):

class ExternalUser < ExternalModel
  ...
end

Cuando se ejecuta en un entorno de prueba, no intentará conectarse a la tabla externa. Por supuesto, los intentos de acceder a una instancia de ExternalUser fallarán, pero puede establecer de forma selectiva una conexión con la base de datos externa durante la prueba de integración, o de lo contrario, referencias simuladas o stub al modelo externo.

Lo más importante es que ahora todas mis pruebas funcionan muy rápido.