Jeremy Hinegardner
1/12/2007 5:54:00 PM
On Sat, Jan 13, 2007 at 01:04:29AM +0900, Jeff Grice wrote:
> I am having difficulty using rake to run tests on a gem I have created.
> I am able to run the tests I have created from the command line
> individually without problem, but when I try to run through rake it
> cannot locate the *.txt files that I use in the tests.
>
> My folder structure has the tests in a folder under the rake file in
> 'tests' and the data files the tests are referencing are in
> 'tests/testdata'
So you have:
project_dir/
Rakefile
tests/
tests/(lots of tests.rb)
tests/testdata/
And your current directory when you are running 'rake test' is
project_dir.
> The rakefile is set up as
>
> Rake::TestTask.new do |t|
> t.libs << "tests"
> t.test_files = FileList['tests/test*.rb']
> t.verbose = true
> end
>
> My test files are referencing *.txt files as follows:
> def test_initialize
> o = PAHelper::FilePeeker.new('testdata/peeker.txt', 1)
The bug is here, the current directory when the test is executed is
'project_dir' but the test assumes it is 'project_dir/tests'
> puts o.output_data
> assert_equal(1, o.output_data.size)
> end
>
> when I run 'rake test' I get the following error:
>
> 1) Error:
> test_initialize(TestFilePeeker):
> Errno::ENOENT: No such file or directory - testdata/peeker.txt
> ./tests/../lib/file_peeker.rb:8:in `initialize'
> ./tests/../lib/file_peeker.rb:8:in `initialize'
> tests/test_file_peeker.rb:7:in `test_initialize'
>
> How do I set up my rakefile so that it can find the *.txt files in the
> testdata folder?
If all of your tests are all in test/ directory the easy way would be to
change your FilePeeker line above to do something like:
# make sure we have the directory of the data data files, in this
# case it is relative to the test's directory by being up one and
# then down the 'testdata' directory
def setup
@data_dir = File.join(File.dirname(__FILE__),"..","testdata"))
....
end
def test_initialize
o = PAHelper::FilePeeker.new(File.join(@data_dir,'peeker.txt'))
puts o.output_data
assert_equal(1, o.output_data.size)
end
Munge as necessary for deep testing directories, etc.
enjoy,
-jeremy
--
========================================================================
Jeremy Hinegardner jeremy@hinegardner.org