2013-01-20 215 views
1

我有一個小項目(非Rails),我正在使用RSpec進行測試。爲了加載模型我使用:RSpec定位資源路徑

require_relative "../lib/checkout" 

但是我現在遇到與加載配置文件中的問題,例如,測試不再位於我的「items.csv」時,以下幾點:

CSV.foreach("items.csv") do |row| 

注意,當規範從spec目錄只運行出現問題,即:

rspec checkout_spec.rb 

從項目的根跑步很精緻:

rspec spec/checkout_spec.rb 

任何幫助,將不勝感激。

回答

1

CSV.foreach使用當前目錄查找文件。您應該使用File.expand_path以獲得到達items.csv的絕對路徑以避免此問題。

編輯補充一個例子

假設文件在root/items.csv,以及與此代碼紅寶石文件在root/lib/file.rb,你可以寫

path = File.expand_path File.join(File.dirname(__FILE__), '..', 'items.csv') 
CSV.foreach path do |row| 
    # rest of code... 
+0

可不可以給使用的一個簡單的例子' File.expand_path'爲此目的?將不勝感激。 – alexs333

+1

'File.expand_path(「items.csv」,File.dirname(__ FILE __))''將得到'items.csv'的完整路徑名,它位於與當前ruby文件'File.expand_path(「相同的目錄中。 /items.csv「,File.dirname(__ FILE __))' - 相同,但是items.csv是上一級 –

+0

Doh,沒有意識到'#expand_path'帶了第二個參數。學到了新東西。 –