I keep wondering if there is a way to have FILE be delayed
in its evaluation. For example, in my tests cases, I usually do the
following so that my test cases are imune to where they are run from:
def test_xyz
open(data_file(“fred”))
assert …
end
end
The problem is I have to add this to every test case since I can’t put
data_file inside a module and include it without also having o define
TEST_DIR as a constant of Object inside every testcase.
In other words, I don’t want to do:
TEST_DIR = File.dirname(FILE)
class TestMyClass < Test::Unit::TestCase
require ‘test_helper’
include TestHelper
TestHelper.init FILE
end
This just seems a bit verbose.
I guess what I need is something like: REQUIRING_FILE
so my TestHelper module could be written as:
module TestHelper
TEST_DIR = File.dirname(REQUIRING_FILE)
DATA_DIR = …as above
end
Has anyone ever needed such a thing? Is there a better way of solving
this problem?
I keep wondering if there is a way to have FILE be delayed in its
evaluation. For example, in my tests cases, I usually do the following so
that my test cases are imune to where they are run from:
you can defer the evaluation by simply using methods:
harp:~/d > cat test/test.rb
require 'test/unit'
class TestMyClass < Test::Unit::TestCase
require 'test/helper' and include TestHelper
def __file__() __FILE__ end
def test_dir() File.dirname __file__ end
def test_that_it_works()
assert_nothing_raised{ p data_file('forty-two') }
end
end
harp:~/d > cat test/helper.rb
module TestHelper
def data_dir() File.join test_dir, 'data' end
def data_file(file) File.join data_dir, file end
end
harp:~/d > ruby test/test.rb
Loaded suite test/test
Started
."test/data/forty-two"
.
Finished in 0.00122 seconds.
2 tests, 1 assertions, 0 failures, 0 errors
kind regards.
-a
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.