2011-12-08 7 views
5

Usar rieles y rspec es fácil tener rspec generar los archivos necesarios para mí cuando estoy usando el comando rails generate con modelos/vistas/controladores. Pero ahora quiero escribir especificaciones para un módulo que escribí. El módulo está en /lib/my_module.rb así que creó una especificación en /spec/lib/my_module_spec.rbcómo escribir/ejecutar especificaciones para archivos que no sean modelo/vista/controlador

El problema que estoy teniendo es que cuando intento hacer rspec spec/ el archivo my_module_spec.rb se ejecuta pero la referencia a mi módulo en lib/my_module.rb no se puede encontrar. ¿Cuál es la forma correcta de hacer esto?

Para su información el archivo my_module_spec.rb tiene require 'spec_helper' en ella ya

require 'spec_helper' 

describe "my_module" do 
    it "first test" 
    result = MyModule.some_method # fails here because it can't find MyModule 
    end 
end 
+0

¿Se incluye el módulo en su my_module_spec.rb? ¿Podrías proporcionar la fuente? – Jasper

+0

@Jasper No lo hice. Pero tampoco tengo que hacerlo cuando lo hago con modelos/vistas/controladores. – Brand

+1

¿necesita el archivo fuente del módulo en la especificación relacionada? 'Requerir "# {} Rails.root /lib/my_module.rb"' Tuve un problema similar a lo que se está viendo y esto en combinación con una solución de Jasper debajo de mí tengo donde tenía que estar. – jaydel

Respuesta

9

Usted podría intentar incluyendo el módulo y tal vez envolviéndolo en un objeto

require 'spec_helper' 

#EDIT according to 
# http://stackoverflow.com/users/483040/jaydel 
require "#{Rails.root}/lib/my_module.rb" 

describe MyModule do 

    let(:wrapper){ 
    class MyModuleWrapper 
     include MyModule 
    end 
    MyModuleWrapper.new 
    } 

    it "#some_method" do 
    wrapper.some_method.should == "something" 
    end 

end 
0

Ponga lo siguiente en su archivo config/application.rb:

config.autoload_paths += %W(#{Rails.root}/lib) 

I was just w relajándome con el mismo problema, y ​​lo anterior funcionó para mí. En realidad no hay ninguna razón por la que debería tener que pasar por el aro para poder acceder a sus archivos desde lib/ RSpec y escribir pruebas para ellos.

1

¿Su módulo contienen métodos de clase o métodos de instancia? Recuerde que los métodos de la clase sólo estarán disponibles a través de

MyModule.some_method 

lo que significa que some_method se define como

def self.some_method 
    ... 
end 

Si el módulo contiene los métodos de instancia, a continuación, utilizar la solución de Jasper anteriormente. Espero que eso aclare.

Cuestiones relacionadas