2012-07-07 15 views
12

Ben Ruby 1.9.2 benim Raylar projelerinden biri yükseltmeye çalışıyorum. Her şey yolunda gitti, ama bir RSpec testi bozuldu. Bu testte ben require Ruby lib: BöyleRuby 1.9.2 ile RSpec içinde lib gerektirir "Böyle bir dosya yüklemek için" getiriyor

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

describe "MyLib" do 

    it "should do something" do 
... 

lib görünüyor:

# file lib/services/my_lib.rb 
class MyLib 

    def self.do_something 
    ... 

Ruby 1.8.7 (REE), test iyi çalıştı:

$ 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 

yılında

$ 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) 
: Yakut bir hata no such file to load almak 1.9.

Hiç bir fikrim yok, Ruby 1.9'un lib'i bulmasını engelliyor.

cevap

23

Ruby 1.9 yük yolu, 1,8 yaptığı tam olarak böyle çalışmaz.

Sen yük yoluna projenin kök dizin eklemek gerekir.

Böyle birini çalıştıran RSpec yapabilirsiniz:

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

... veya manuel (sizin spec_helper.rb yük yoluna şeyler ekleyerek spec_helper.rb

$:<< File.join(File.dirname(__FILE__), '..') 
üstündeki bu koymak tarafından

yerine aşağıdaki gibi gerektirecek hattını yeniden yazmak mümkün olabilir bu yüzden varsayılan olarak RSpec yanı yük yoluna yerel lib dizin ekler düşünüyorum:

yolunu tanımlayan
require 'services/my_lib' 
+3

Cevabınızın son kısmı önemliydi! "require 'service/my_lib'" Ruby1.9'da ve _1_ Ruby1.8'de çalışır. Açıkçası RSpec, $ libAD_PATH içine 'lib' içerir. – DiegoFrings

+1

harika! ruby'yi 1.8'den 1.9'a yükseltirken rspec '- I. çok teşekkürler @Frost! –

+0

Eğer "rspec" yi her çalıştırdığınızda '-I. 'Belirtmek istemezseniz, bunu .rspec dosyanıza ekleyebilirsiniz ve varsayılan olarak eklenecektir. – bloudermilk

0

deneyin spec spec/models/my_lib_spec.rb bulunan ve lib/services/my_lib.rb test etmek istiyorum Eğer elle

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

ve sonra bu

require 'my_lib.rb' 
4

gibi kütüphaneyi ekleyin, ardından sadece haber lib dosyası

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

describe "MyLib" do 

    it "should do something" do 
krokisi spec

Son not: spec_helper'ı eklediğiniz için, Rails tüm bunları sizin için yüklemesi gerektiğinden, bağımlılıklara tüm yolları vermek zorunda değilsiniz.

6

RSpec 2.x'te, lib dizini otomatik olarak yükleme yoluna eklenir (bkz. RSpec-Core#get_started).

Yani sadece spec dosyasında require 'services/my_lib' kullanabilirsiniz.

+0

Ben lib dizini otomatik olarak her zaman yük yoluna eklenmiş göremiyorum, ancak bu doğru – why

+0

@ Yanlış ben kırık bağlantıyı düzeltildi. Orada açıkça belirtilmemiş gibi görünüyor, ancak örnek, dolaylı olarak kullanıldığını gösteriyor. Bunu düzeltmeye çalışacağım. –

+0

RSpec 3.5 için (en son) bağlantı [burada] (http://rspec.info/documentation/3.5/rspec-core/index.html#Get_Started). –

İlgili konular