2012-05-15 10 views
13

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 las aplicaciones.Prueba de modelos ActiveRecord dentro de una gema?

me trasladaron a la modelo en un módulo y lo puso 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 

Me dejé rspec en el Gemfile, puso en funcionamiento con éxito, crea el siguiente especificación:

require 'spec_helper' 

describe InviteInterface::EncounterSurvey do 
    it 'should belong to user' do 
    subject.should respond_to(:user) 
    end 

end 

Desafortunadamente, 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 DB?

Respuesta

13

De todos modos, debe probar su biblioteca con una base de datos, por lo que también podría usar una base de datos SQLite en la memoria para realizar pruebas. Sólo tiene que añadir esto a spec_helper.rb:

ActiveRecord::Base.establish_connection(:adapter => "sqlite3", 
             :database => ":memory:") 

y crear el esquema de la siguiente manera:

ActiveRecord::Schema.define do 
    self.verbose = false 

    create_table :invites, :force => true do |t| 
    t.string :text 
    end 
    ... 
end 
+0

Gracias Yuri, esto en última instancia funcionó para mí (aunque tuve que pasar a minitest de rspec debido a problemas dolorosos de sqlite3) –

+1

Esto es genial, esp. con la opción de abajo: base de datos => ': memoria:' – ghayes

+0

@juwiley puede aconsejarme qué debo usar minitest o rspec en función de su experiencia. –

10

He encontrado que si está probando sus modelos aislados, es posible que así tratar de hacer uso de la SQLite3 -Memoria capacidades de la hora de definir la conexión ActiveRecord para obtener especificaciones técnicas muy rápidas:

ActiveRecord::Base.establish_connection(
    :adapter => 'sqlite3', 
    :database => ':memory:' 
) 

Inténtelo hacia fuera, funcionó como un encanto para mí y puso a prueba mis modelos mucho mas rapido.

+2

Esto es realmente útil para crear una base de datos de entorno de prueba simple en la memoria. Gran consejo. – ghayes

Cuestiones relacionadas