ruby RSpec中的相对文件路径

eqqqjvef  于 2023-03-01  发布在  Ruby
关注(0)|答案(3)|浏览(125)

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

oxcyiej7

oxcyiej71#

Rails.root将为您提供应用程序根目录,因此

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

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

bnl4lu3b

bnl4lu3b2#

我最近处理了这个问题,我得出了以下结论:
spec_helper.rb(或等效项)中定义一个指向RSpec根的常量:

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

qcbq4gxm

qcbq4gxm3#

据我所知(从每一两个月看一次),没有更好的方法在spec_helper中构建一些东西,使用__FILE__值获取到已知内容位的路径,然后在此基础上构建自己的助手。
显然,您也可以在单个*_spec.rb文件中使用相对于__FILE__的路径。

相关问题