2013-06-06 16 views
17

Sto riscontrando un problema nel testare la mia gemma che include una directory lib, su JRuby 1.7.4.Come includere la directory lib nei test rspec

voglio testare un file che si trova a lib/vger/resources/account_manager.rb

mio file di specifica è in spec/vger/resources/account_manager_spec.rb

require 'spec_helper' 

describe Vger::Resources::AccountManager do  
    . 
    . 
    end 
end 

Sto cercando di includere il file che voglio testare in spec_helper.rb

require 'rubygems' 
require 'bundler/setup' 
require 'vger/resources/account_manager' 
require 'vger' 

RSpec.configure do |config| 
    # some (optional) config here 
end 

Durante l'esecuzione del test tramite il comando rspec spec/vger/resources/account_manager_spec.rb, viene visualizzato questo errore:

NameError: uninitialized constant Vger::Resources 
    const_missing at org/jruby/RubyModule.java:2631 

Sembra che il file che voglio testare non venga caricato. Per favore dimmi dove sto andando male e dove dovrei apportare correzioni.

+0

Prova a usa 'require_relative' e path to resources nella directory lib dalla directory dove è' spec_helper.rb'. Qualcosa come 'require_relative" ../ lib/vger "' invece di 'require" vger "' ant, ecc. –

+0

@YevgeniyAnfilofyev Sembra non funzionare. Ho provato require_relative '../lib/vger/' anche require_relative '../lib/vger/resources/' e rimuovere requre 'Vger' e richiedono "vger/resources/account_manager" –

+1

Vedere questa domanda http: // stackoverflow.it/questions/11376718/require-lib-in-rspec-with-ruby-1-9-2-bring-no-such-file-to-load – toro2k

risposta

2

carichi RSpec rotaie ambiente, come mi ricordo, in modo che solo bisogno di aggiungere alle directory autoload nel file application.rb

Trova questa riga

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

decommentarla risolvere il problema per essere come questo :

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

dovrebbe funzionare

+5

Questo non è un progetto di rotaie. Questa è una gemma che sto usando in un'applicazione rotaia. COSÌ, suppongo che non funzionerà –

+0

Suppongo che questo ricollierà automaticamente il percorso? Quindi, ad esempio, verranno caricate anche le attività di rake in '/ lib/tasks'? – Dennis

14

manualmente si aggiorna r LOAD PATH in spec_helper.rb prima di chiamare require dovrebbe fare il trucco. Prova a fare questo la prima riga del spec_helper.rb:

$: << '../lib' 

o

$LOAD_PATH << '../lib' 

($: è un alias per $LOAD_PATH)

+0

L'ho provato. /home/...../work/vger/lib sembra essere stato caricato ma ha ancora lo stesso errore –

+1

'$: << File.expand_path (" spec/lib ")' ha funzionato per me – amorphid

+4

Considerare di non utilizzare ' $: 'E 'molto criptico e dato che' $ LOAD_PATH' è oh così nonoffensivo da scrivere, quindi potresti anche usarlo. Ma +1 per l'inclusione. – Csteele5

4

Io uso il seguente per le mie specifiche ... a seconda su quale livello è la tua lib ....

require_relative '../../lib/module'

+0

Potresti voler migliorare la tua risposta con qualche altro dettaglio. Uno dei commenti ha un po 'più di informazioni che potresti includere. – CaptainBli

2

È possibile aggiungere la seguente riga al file .rspec in radice di app: -I lib

E 'anche possibile includere file: -r lib/api.rb

Queste opzioni sono descritte come segue:

-I PATH

Specify PATH to add to $LOAD_PATH (may be used more than once).

-r, --require PATH

Require a file.