RSpec中的相对文件路径

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

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

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

Rails.root会给你应用程序root,所以

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

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

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

在指向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