我在/lib/classes中有一个类的RSpec测试,需要访问一个zip文件(不上传)。该文件存储在/spec/fixtures/files/test.zip中。如何输入正确的路径,使其与环境无关,即没有绝对路径?
/lib/classes
/spec/fixtures/files/test.zip
oxcyiej71#
Rails.root将为您提供应用程序根目录,因此
Rails.root
Rails.root.join "spec/fixtures/files/test.zip"
将为您提供文件的绝对路径,而不知道应用程序在硬盘上的位置。
bnl4lu3b2#
我最近处理了这个问题,我得出了以下结论:在spec_helper.rb(或等效项)中定义一个指向RSpec根的常量:
spec_helper.rb
RSPEC_ROOT = File.dirname __FILE__
在*_spec.rb(或等效)测试文件中使用此变量:
*_spec.rb
require 'spec_helper' File.open("#{RSPEC_ROOT}/resources/example_data.json")
为什么选择此解决方案?
require 'spec_helper'
这里有一个要点:https://gist.github.com/thisismydesign/9dc142f89b82a07e413a45a5d2983b07
qcbq4gxm3#
据我所知(从每一两个月看一次),没有更好的方法在spec_helper中构建一些东西,使用__FILE__值获取到已知内容位的路径,然后在此基础上构建自己的助手。显然,您也可以在单个*_spec.rb文件中使用相对于__FILE__的路径。
spec_helper
__FILE__
3条答案
按热度按时间oxcyiej71#
Rails.root
将为您提供应用程序根目录,因此将为您提供文件的绝对路径,而不知道应用程序在硬盘上的位置。
bnl4lu3b2#
我最近处理了这个问题,我得出了以下结论:
在
spec_helper.rb
(或等效项)中定义一个指向RSpec根的常量:在
*_spec.rb
(或等效)测试文件中使用此变量:为什么选择此解决方案?
require 'spec_helper'
之外,它不需要向测试文件中添加任何内容Rails.root
不同)这里有一个要点:https://gist.github.com/thisismydesign/9dc142f89b82a07e413a45a5d2983b07
qcbq4gxm3#
据我所知(从每一两个月看一次),没有更好的方法在
spec_helper
中构建一些东西,使用__FILE__
值获取到已知内容位的路径,然后在此基础上构建自己的助手。显然,您也可以在单个
*_spec.rb
文件中使用相对于__FILE__
的路径。