2013-01-20 176 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'带了第二个参数。学到了新东西。 –