Relative File Path in RSpec
As far as I know (from looking every month or two) there is no better way that building something in spec_helper
that uses the __FILE__
value to grab the path to a know bit of content, then build your own helpers on top of that.
You can obviously use a path relative to __FILE__
in the individual *_spec.rb
file as well.
I've tackled this issue recently and here's what I came up with:
Define a constant in your spec_helper.rb
(or equivalent) pointing to RSpec root:
RSPEC_ROOT = File.dirname __FILE__
Use this variable in your *_spec.rb
(or equivalent) test files:
require 'spec_helper'
File.open("#{RSPEC_ROOT}/resources/example_data.json")
Why this solution?
- It doesn't make use of the location of the test file which may be subject to change (spec_helper is likely not)
- It doesn't require any additions to test files other than the already existing
require 'spec_helper'
- It doesn't depend on Rails (unlike
Rails.root
)
Here's a Gist: https://gist.github.com/thisismydesign/9dc142f89b82a07e413a45a5d2983b07
Rails.root
will give you the app root, so
Rails.root.join "spec/fixtures/files/test.zip"
will give you the absolute path of your file, agnostic of the location of the app on your hard drive.