ruby on rails - sintaxis - Probando modelos de ActiveRecord dentro de una gema?
que es ruby on rails y para que sirve (2)
He descubierto que si está probando sus modelos aislados, también puede intentar usar las capacidades en memoria de SQLite3 al definir la conexión ActiveRecord
para obtener especificaciones muy rápidas:
ActiveRecord::Base.establish_connection(
:adapter => ''sqlite3'',
:database => '':memory:''
)
Pruébalo, funcionó como un encanto para mí y consiguió que mis modelos fueran probados mucho más rápido.
Estoy tratando de extraer un conjunto de modelos de una aplicación Rails 3.2.3 en una joya para que puedan ser utilizados como una interfaz compartida entre aplicaciones.
Moví el modelo a un módulo y lo puse en lib / invite_interface / invite.rb
module InviteInterface
class Invite < ActiveRecord::Base
belongs_to :user
end
def to_json; end;
def from_json; end;
end
Pellizqué rspec en el gemfile, lo ejecuté con éxito y creé la siguiente especificación:
require ''spec_helper''
describe InviteInterface::EncounterSurvey do
it ''should belong to user'' do
subject.should respond_to(:user)
end
end
Lamentablemente, no puedo ejecutar rspec en el modelo, porque active record / rspec quiere una conexión activa.
1) InviteInterface::Invite should belong to encounter survey set
Failure/Error: subject.should respond_to(:user)
ActiveRecord::ConnectionNotEstablished:
ActiveRecord::ConnectionNotEstablished
# /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection''
# /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection''
# /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection''
# /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:228:in `columns''
# /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:243:in `column_defaults''
¿Cómo evito que ActiveRecord busque una conexión de base de datos?
De todos modos, debe probar su biblioteca con una base de datos, por lo que también podría utilizar una base de datos SQLite en la memoria para realizar pruebas. Solo agregue esto a spec_helper.rb
:
ActiveRecord::Base.establish_connection(:adapter => "sqlite3",
:database => ":memory:")
y crea tu esquema de la siguiente manera:
ActiveRecord::Schema.define do
self.verbose = false
create_table :invites, :force => true do |t|
t.string :text
end
...
end