2012-07-07 26 views
12

Estoy intentando actualizar uno de mis proyectos de Rails al Ruby 1.9.2. Todo fue bastante bien, pero se rompió una prueba de RSpec. En esta prueba me require un rubí lib:requiere lib en RSpec con Ruby 1.9.2 trae "no se carga ese archivo"

# file spec/models/my_lib_spec.rb 
require 'spec_helper' 
require 'lib/services/my_lib' 

describe "MyLib" do 

    it "should do something" do 
... 

Las miradas lib como este:

# file lib/services/my_lib.rb 
class MyLib 

    def self.do_something 
    ... 

en Ruby 1.8.7 (REE) la prueba funcionó bien:

$ ruby -v 
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin11.1.0], MBARI 0x6770, Ruby 
Enterprise Edition 2011.03 
$ rspec ./spec/models/my_lib_spec.rb 
.. 

Finished in 1.4 seconds 
2 examples, 0 failures 

En Ruby 1.9.2 obtengo un error no such file to load:

$ ruby -v 
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0] 
$ rspec ./spec/models/my_lib_spec.rb 
/Users/tmangner/.rvm/gems/[email protected]/gems/activesupport- 
3.2.2/lib/active_support/dependencies.rb:251:in `require': no such file 
to load -- lib/services/my_lib (LoadError) 

No tengo ni idea, lo que impide que Ruby 1.9 encuentre la lib.

Respuesta

23

La ruta de carga en ruby ​​1.9 no funciona exactamente como en 1.8.

Necesita agregar el directorio raíz del proyecto a su ruta de carga.

Puede hacerlo por cualquiera de rspec funcionando de esta manera:

rspec -I . ./spec/models/tipp_remember_spec.rb 

... o añadiendo manualmente cosas a la trayectoria de la carga en su spec_helper.rb (poner esto en la parte superior de su spec_helper.rb

$:<< File.join(File.dirname(__FILE__), '..') 

Creo que rspec por defecto también agrega su directorio local lib a la ruta de carga, por lo que podría reescribir la línea requerida de la siguiente manera:

require 'services/my_lib' 
+3

¡La última parte de tu respuesta fue la clave! "require 'service/my_lib'" funciona en Ruby1.9 _and_ Ruby1.8. Obviamente, RSpec incluye 'lib' en $ LOAD_PATH. – DiegoFrings

+1

¡genial! rspec '- I .' es la clave para mí al actualizar ruby ​​de 1.8 a 1.9. muchas gracias @Frost! –

+0

Si no desea especificar '-I .' cada vez que ejecuta' rspec' puede agregarlo a su archivo .rspec y se agregará de manera predeterminada. – bloudermilk

0

Intenta definir la ruta manualmente

$LOAD_PATH << './lib/services/'

y luego añadir la biblioteca como esta

require 'my_lib.rb' 
4

Si su especificación se encuentra spec/models/my_lib_spec.rb y que desea probar lib/services/my_lib.rb, a continuación, sólo decir la especificación de cómo llegar al archivo lib

require 'spec_helper' 
require_relative '../../lib/services/my_lib' 

describe "MyLib" do 

    it "should do something" do 

Nota final: ya que está incluyendo spec_helper, normalmente no tiene que dar todas las rutas a las dependencias, ya que Rails debería cargarlas todas por usted.

6

En RSpec 2.x, el directorio lib se agrega automáticamente a la ruta de carga (consulte RSpec-Core#get_started).

Así que puede simplemente usar require 'services/my_lib' en su archivo de especificaciones.

+0

No puedo ver 'el directorio lib se agrega automáticamente a la ruta de carga 'en cualquier lugar, pero es verdadero – why

+0

@por qué arreglé el enlace roto. Parece que no está explícitamente establecido allí, pero el ejemplo sí lo muestra implícitamente. Trataré de arreglarlo. –

+0

Para RSpec 3.5 (más reciente) el enlace es [aquí] (http://rspec.info/documentation/3.5/rspec-core/index.html#Get_Started). –

Cuestiones relacionadas