2012-07-07 5 views
12

Ich versuche, eines meiner Rails-Projekte auf Ruby 1.9.2 zu aktualisieren. Alles lief ziemlich gut, aber ein RSpec-Test brach. In diesem Test ich require ein Ruby lib:erfordert lib in RSpec mit Ruby 1.9.2 bringt "keine solche Datei zum Laden"

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

describe "MyLib" do 

    it "should do something" do 
... 

Die lib sieht wie folgt aus:

# file lib/services/my_lib.rb 
class MyLib 

    def self.do_something 
    ... 

In Ruby 1.8.7 (REE) arbeitete der Test gut:

$ 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 

In Ruby 1.9.2 Ich erhalte einen Fehler 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) 

Ich habe keine Ahnung, was Ruby 1.9 davon abhält, die lib zu finden.

Antwort

23

Der Ladepfad in Ruby 1.9 funktioniert nicht genau wie in 1.8.

Sie müssen das Stammverzeichnis des Projekts zu Ihrem Ladepfad hinzufügen.

Sie können dies wie folgt entweder durch Laufen rspec tun:

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

... oder durch manuelles Material zum Lastpfad in Ihrem spec_helper.rb Hinzufügen (fügen Sie dies an der Spitze Ihres spec_helper.rb

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

Ich denke rspec fügt standardmäßig das lokale Verzeichnis lib dem Ladepfad hinzu, sodass Sie die require-Zeile stattdessen wie folgt schreiben können:

require 'services/my_lib' 
+3

Der letzte Teil Ihrer Antwort war der Schlüssel! "require 'service/my_lib'" funktioniert in Ruby1.9 _and_ Ruby1.8. Offensichtlich enthält RSpec 'lib' in den $ LOAD_PATH. – DiegoFrings

+1

großartig! rspec '- I .' ist der Schlüssel für mich, wenn ich Ruby von 1.8 auf 1.9 aktualisiere. Vielen Dank @Frost! –

+0

Wenn Sie '-I .' nicht jedes Mal angeben möchten, wenn Sie' rspec' ausführen, können Sie es Ihrer .rspec-Datei hinzufügen und es wird standardmäßig hinzugefügt. – bloudermilk

0

Versuchen definieren den Pfad manuell

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

und fügen Sie dann die Bibliothek wie diese

require 'my_lib.rb' 
4

Wenn Ihr spec spec/models/my_lib_spec.rb befindet und Sie wollen lib/services/my_lib.rb testen, dann sagen Sie nur die wie man zur lib-datei kommt

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

describe "MyLib" do 

    it "should do something" do 

Schlussbemerkung: Da Sie spec_helper einschließen, müssen Sie normalerweise nicht alle Pfade zu Abhängigkeiten angeben, da Rails alle diese für Sie laden soll.

6

In RSpec 2.x wird das Verzeichnis lib automatisch zum Ladepfad hinzugefügt (siehe RSpec-Core#get_started).

So können Sie einfach require 'services/my_lib' in Ihrer Spezifikationsdatei verwenden.

+0

Ich kann nicht sehen, 'lib-Verzeichnis wird automatisch hinzugefügt, um den Ladepfad 'irgendwo, aber es ist wahr – why

+0

@Why ich den defekten Link behoben. Sieht so aus, als wäre es dort nicht explizit angegeben, aber das Beispiel zeigt es implizit verwendet. Ich werde versuchen, das zu beheben. –

+0

Für RSpec 3.5 (neueste) ist der Link [hier] (http://rspec.info/documentation/3.5/rspec-core/index.html#Get_Started). –

Verwandte Themen