RSpec中的相对文件路径

时间:2012-02-19 00:11:54

标签: ruby-on-rails ruby rspec rspec-rails

我对/lib/classes中需要访问zip文件(无上传)的类进行了RSpec测试。该文件存储在/spec/fixtures/files/test.zip中。如何输入正确的路径以使其与环境无关,即没有绝对路径?

3 个答案:

答案 0 :(得分:14)

Rails.root将为您提供应用根,所以

Rails.root.join "spec/fixtures/files/test.zip"

将为您提供文件的绝对路径,不知道应用在硬盘上的位置。

答案 1 :(得分:4)

据我所知(从每个月或两个月开始),没有更好的方法可以在spec_helper中构建一些使用__FILE__值来获取已知内容的路径的方法,然后在此基础上建立自己的助手。

您显然可以在单个__FILE__文件中使用相对于*_spec.rb的路径。

答案 2 :(得分:2)

我最近解决了这个问题,这就是我想出的:

在指向RSpec root的spec_helper.rb(或等效)中定义一个常量:

RSPEC_ROOT = File.dirname __FILE__

*_spec.rb(或等效的)测试文件中使用此变量:

require 'spec_helper'

File.open("#{RSPEC_ROOT}/resources/example_data.json")

为何选择此解决方案?

  • 它没有使用可能的测试文件的位置 可能会有变化(spec_helper可能不会)
  • 除了现有测试文件之外,它不需要添加任何其他测试文件 require 'spec_helper'
  • 它不依赖于Rails(与Rails.root不同)

这是一个要点:https://gist.github.com/thisismydesign/9dc142f89b82a07e413a45a5d2983b07