我想用rake自动进行测试。 当我从命令提示符运行此命令时,在主目录中,我的测试运行正常。
ruby -I lib/radar_mon/ tests/radar_mon/test_geoname.rb
我的Rakefile看起来像这样:
task default: %w[test]
task :test do
ruby "tests/radar_mon/test_geoname.rb"
end
我的测试文件test_geoname.rb看起来像这样
require 'test/unit'
require 'geoname'
class TestGeoname < Test::Unit::TestCase
def test_first
g = Geoname.new( [0.0,0.0] )
assert_equal( [0.0,0.0], g.location)
end
end
图书馆的结构是这样的
home/lib/radar_mon/geoname.rb
home/tests/radar_mon/test_geoname.rb
home/Rakefile
如何配置我的rake文件以运行测试?我不应该在测试文件中更改require语句。
/home/pi/.rvm/rubies/ruby-2.2.10/bin/ruby tests/radar_mon/test_geoname.rb
tests/radar_mon/test_geoname.rb:2:in `require_relative': cannot load such file -- /home/pi/Documents/HurricaneTracker/tests/radar_mon/geoname (LoadError)
from tests/radar_mon/test_geoname.rb:2:in `<main>'
rake aborted!
不确定是否重要,但是我正在使用rvm。
答案 0 :(得分:1)
关于尝试在Rakefile的顶部添加这样的内容,您可能需要修改它以仅需要rake任务所需的文件。
Dir[File.join(__dir__, "/**/*.rb")].each do |file|
require file
end
更具体地针对您的情况,这将起作用:
my_files = FileList['home/lib/radar_mon/*.rb', 'home/tests/radar_mon.*rb']
my_files.each do |file|
require file
end
task default: %w[test]
task :test do
ruby "tests/radar_mon/test_geoname.rb"
end
之所以可行,是因为Rake在这种情况下以递归方式处理需求。 FileList
由rake
提供。
有关更多信息,您可能希望参考rake gem documentation 甚至还有http://www.virtuouscode.com/2014/04/24/rake-part-4-pathmap/