Rake无法加载此类文件单元测试

时间:2018-10-09 00:32:46

标签: ruby unit-testing rake rakefile

我想用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。

1 个答案:

答案 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在这种情况下以递归方式处理需求。 FileListrake提供。

有关更多信息,您可能希望参考rake gem documentation 甚至还有http://www.virtuouscode.com/2014/04/24/rake-part-4-pathmap/