ruby on rails - requiere lib en RSpec con Ruby 1.9.2 trae "no se carga ese archivo"
ruby-on-rails require (4)
Estoy intentando actualizar uno de mis proyectos de Rails a Ruby 1.9.2
. Todo fue bastante bien, pero se rompió una prueba de RSpec. En esta prueba, necesito una lib
Ruby:
# file spec/models/my_lib_spec.rb
require ''spec_helper''
require ''lib/services/my_lib''
describe "MyLib" do
it "should do something" do
...
La lib se ve así:
# 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/ruby-1.9.2-p290@madgoal/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.
Intenta definir la ruta manualmente
$LOAD_PATH << ''./lib/services/''
y luego agrega la biblioteca como esta
require ''my_lib.rb''
La ruta de carga en ruby 1.9 no funciona exactamente como lo hizo en 1.8.
Necesita agregar el directorio raíz del proyecto a su ruta de carga.
Puedes hacer esto ejecutando rspec como este:
rspec -I . ./spec/models/tipp_remember_spec.rb
... o agregando cosas manualmente a la ruta de carga en su spec_helper.rb
(ponga 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 lib
local a la ruta de carga, por lo que podría reescribir la línea requerida de la siguiente manera:
require ''services/my_lib''
Si su especificación se encuentra en spec/models/my_lib_spec.rb
y desea probar lib/services/my_lib.rb
, simplemente dígale a la especificación 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 por usted.
En RSpec 2.x, el directorio lib
se agrega automáticamente a la ruta de carga (vea RSpec-Core # get_started ).
Entonces puede usar require ''services/my_lib''
en su archivo spec.