我有一个RSpec测试/lib/classes,需要访问一个zip文件(没有上传).该文件存储在/spec/fixtures/files/test.zip.如何输入正确的路径以使其与环境无关,即没有绝对路径?
Eva*_*wry 14
Rails.root 会给你应用程序root,所以
Rails.root.join "spec/fixtures/files/test.zip"
Run Code Online (Sandbox Code Playgroud)
将为您提供文件的绝对路径,不知道应用程序在硬盘上的位置.
我最近解决了这个问题,这是我想出的:
在您的spec_helper.rb(或等效的)中定义一个指向 RSpec 根的常量:
RSPEC_ROOT = File.dirname __FILE__
Run Code Online (Sandbox Code Playgroud)
在您的*_spec.rb(或等效的)测试文件中使用此变量:
require 'spec_helper'
File.open("#{RSPEC_ROOT}/resources/example_data.json")
Run Code Online (Sandbox Code Playgroud)
为什么是这个解决方案?
require 'spec_helper'Rails.root)这是一个要点:https : //gist.github.com/thisismydesign/9dc142f89b82a07e413a45a5d2983b07
据我所知(从一两个月的时间来看),没有更好的方法来构建spec_helper使用该__FILE__值的东西来抢占已知内容的路径,然后在此之上构建自己的助手。
您显然也可以__FILE__在单个*_spec.rb文件中使用相对于的路径。