2012-07-07 42 views
12

我想升級我的一個Rails項目到Ruby 1.9.2。一切都很順利,但是一次RSpec測試破裂了。在這個測試我require一個Ruby lib在RSpec中需要lib與Ruby 1.9.2帶來「沒有這樣的文件加載」

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

describe "MyLib" do 

    it "should do something" do 
... 

的LIB看起來像這樣:

# file lib/services/my_lib.rb 
class MyLib 

    def self.do_something 
    ... 

在Ruby 1.8.7(REE)測試效果很好:

$ 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 

在Ruby 1.9.2我收到錯誤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) 

我不知道Ruby 1.9是否能找到lib。

回答

23

ruby​​ 1.9中的加載路徑與1.8中的加載路徑不一樣。

您需要將項目的根目錄添加到加載路徑。通過在spec_helper.rb手動添加的東西給負載路徑(把這個在您的spec_helper.rb

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

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

...或:

您可以通過運行rspec的這樣做

我認爲默認情況下,rspec會將您的本地lib目錄也添加到加載路徑,因此您可能可以按如下方式改寫require行:

require 'services/my_lib' 
+3

你答案的最後部分是關鍵! 「require'service/my_lib'」適用於Ruby1.9和Ruby1.8。顯然,RSpec在$ LOAD_PATH中包含'lib'。 – DiegoFrings 2012-07-07 18:12:46

+1

太棒了! rspec' - 我是我在將紅寶石從1.8升級到1.9時的關鍵。非常感謝@Frost! – 2012-12-07 02:43:53

+0

如果您不想在每次運行rspec時指定'-I .',則可以將其添加到.rspec文件中,並且默認情況下會添加它。 – bloudermilk 2014-05-20 23:17:32

0

嘗試定義路徑手動

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

然後添加這樣

require 'my_lib.rb' 
4

庫如果你的天賦所在spec/models/my_lib_spec.rb和你想測試lib/services/my_lib.rb,然後就告訴spec如何進入lib文件

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

describe "MyLib" do 

    it "should do something" do 

最後說明:由於您包含spec_helper,因此您通常不必爲所有路徑提供依賴關係,因爲Rails應爲您加載所有這些路徑。

6

在RSpec 2.x中,lib目錄會自動添加到加載路徑(請參閱RSpec-Core#get_started)。

所以你可以在你的spec文件中使用require 'services/my_lib'

+0

我看不到'lib目錄自動添加到加載路徑'任何地方,但它是真的 – why 2013-04-09 06:25:23

+0

@爲什麼我修復了損壞的鏈接。看起來這裏沒有明確說明,但是這個例子確實表明它隱含地使用了。我會盡力修正。 – 2013-04-10 01:49:29

+0

對於RSpec 3.5(最新),鏈接是[here](http://rspec.info/documentation/3.5/rspec-core/index.html#Get_Started)。 – 2016-11-16 04:21:54

相關問題