2013-06-06 8 views
17

Ich habe ein Problem beim Testen meines Edelsteins, der ein Verzeichnis lib enthält, auf JRuby 1.7.4.Wie lib-Verzeichnis in rspec Tests enthalten

Ich möchte eine Datei auf lib/vger/resources/account_manager.rb

Meine Spec-Datei ist in spec/vger/resources/account_manager_spec.rb

require 'spec_helper' 

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

Ich versuche, die Datei aufzunehmen, die ich möchte testen 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 
sich testen

Beim Ausführen des Tests mit dem Befehl rspec spec/vger/resources/account_manager_spec.rb erhalte ich diesen Fehler:

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

Ich scheint, dass die Datei, die ich testen möchte, nicht geladen wird. Bitte sagen Sie mir, wo ich falsch liege und wo ich Korrekturen vornehmen soll.

+0

Versuchen Sie, Verwenden Sie 'require_relative' und den Pfad zu den Ressourcen im lib-Verzeichnis aus dem Verzeichnis, in dem sich' spec_helper.rb' befindet. Etwas wie 'require_relative" ../ lib/vger "' anstelle von 'erfordert" vger "' ant usw. –

+0

@YevgeniyAnfilofyev Es scheint nicht zu funktionieren. Ich probierte Require_relative '../lib/vger/' auch Requires_relative '../lib/vger/resources/' und entfernen Anforderung 'Vger' und erfordern "vger/resources/account_manager" –

+1

Siehe diese Frage http: // stackoverflow.com/questions/11376718/require-lib-in-rspec-mit-ruby-1-9-2-bringt-keine-so-Datei-zu-laden – toro2k

Antwort

2

RSpec Lasten Schienen Umgebung, wie ich mich erinnere, so brauchen Sie nur automatisch zu laden Verzeichnisse in Ihrem application.rb Datei

diese Zeile finden

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

uncomment es es so sein zu beheben hinzufügen :

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

sollte es

+5

Dies ist kein Rails-Projekt. Dies ist ein Juwel, das ich in einer Schienenanwendung verwende. SO, ich denke, es wird nicht funktionieren –

+0

Ich nehme an, dies wird den Pfad rekursiv autoload? So werden zB alle Rake-Tasks unter '/ lib/tasks' geladen? – Dennis

14

manuell arbeiten aktualisieren Sie r LOAD PATH in spec_helper.rb vor dem Aufruf require sollte den Trick tun. Versuchen Sie, dies die erste Zeile Ihres spec_helper.rb machen:

$: << '../lib' 

oder

$LOAD_PATH << '../lib' 

($: ist ein Alias ​​für $LOAD_PATH)

+0

Ich habe es versucht. /home/...../work/vger/lib scheint geladen zu werden, aber immer noch den gleichen Fehler –

+1

'$: << File.expand_path (" spec/lib ")' arbeitete für mich – amorphid

+4

Überlegen Sie nicht ' $: 'Es ist sehr kryptisch und da' $ LOAD_PATH' ist oh so unangreifbar zu tippen, also könntest du es auch stattdessen verwenden. Aber +1 für die Aufnahme. – Csteele5

4

ich folgendes für meine Spezifikationen verwenden ... je auf welcher Ebene Ihre Lib ist ....

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

+0

Vielleicht möchten Sie Ihre Antwort mit ein paar weiteren Details verbessern. Einer der Kommentare enthält ein bisschen mehr Informationen, die Sie hinzufügen könnten. – CaptainBli

2

Sie können die folgende Zeile in die .rspec Datei in root App hinzufügen: -I lib

Es ist auch möglich, Dateien enthalten: -r lib/api.rb

Diese Optionen werden wie folgt beschrieben:

-I PATH

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

-r, --require PATH

Require a file.

Verwandte Themen