为什么这需要从rake中失败但在明确运行时成功?

时间:2011-03-31 04:39:23

标签: ruby rake

帮助我理解为什么这个项目的测试在直接执行时运行但在通过rake运行时不运行。通过Rake TestTask运行时的错误:

** Execute test
/home/myockey/.rvm/rubies/ruby-1.9.2-p136/bin/ruby -I"lib:test" "/home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/unit/data_test.rb" "test/unit/station_test.rb" "test/unit/raw_test.rb" "test/unit/parser_test.rb" "test/unit/report_test.rb" 
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- test/unit/../metar_test_helper.rb (LoadError)
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from test/unit/data_test.rb:4:in `<top (required)>'
    from /home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `load'
    from /home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `block in <main>'
    from /home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `each'
    from /home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `<main>'
rake aborted!

当我直接运行脚本时,我得到以下内容:

myockey@myockey-K61IC:~/opt/joeyates-metar-parser-cdca19f/test/unit$ ruby data_test.rb 
Loaded suite data_test
Started
...................................................
Finished in 0.084939 seconds.

51 tests, 121 assertions, 0 failures, 0 errors, 0 skips

ruby​​文件的顶部如下所示:

#!/usr/bin/env ruby
# encoding: utf-8

require File.dirname(__FILE__) + '/../metar_test_helper'

class TestMetarData < Test::Unit::TestCase

请注意,我尝试将.rb文件扩展名添加到metar_test_helper无效。请放心,文件的父目录中存在名为metar_test_helper.rb的文件,并且该文件具有足够的权限可供访问。

增加了赏金。我知道这必须是一个简单的路径问题,但我真的很感激一些指导解决它并帮助我理解它。

2 个答案:

答案 0 :(得分:3)

这只是您需要解决的路径问题。当您手动运行测试时,您位于test / unit目录中,该目录似乎具有1级别的文件。在rake任务中,您位于测试目录的父级(假设为RAILS_HOME)。

答案 1 :(得分:3)

您是否在两种情况下都使用Ruby 1.9.2?

1.9.2在路径(".")中不包含$:,而1.9.2之前版本则包含STDERR.puts "RUBY_VERSION is #{RUBY_VERSION}" STDERR.puts "Path is #{$:}"

要查看您正在使用的Ruby版本以及路径,请执行

require File.dirname(__FILE__) + '/../metar_test_helper'
在异常诱导行之前

STDERR.puts "The file I'm requiring is #{File.dirname(__FILE__) + '/../metar_test_helper'}"

如果这不能解决问题,请通过

询问它需要什么
{{1}}

并看看两种方法中的情况。

您可能希望在How do I debug Ruby scripts?

中查看有关调试的其他提示