尝试运行测试时获取未初始化的常量错误

Eth*_*han 12 ruby testing ruby-on-rails

我刚刚更新了所有的宝石,我发现在尝试运行Test :: Unit测试时我遇到了错误.我收到下面复制的错误.这来自于创建新的空Rails项目,搭建一个简单的模型和运行rake test.

尝试谷歌搜索"未初始化的常量"和TestResultFailureSupport.我发现的唯一一件事是2007年的这个错误报告.

我正在使用OS X.

这些是我在测试停止工作之前更新的宝石:

$ sudo gem outdated
Password:
RedCloth (4.2.1 < 4.2.2)
RubyInline (3.8.1 < 3.8.2)
ZenTest (4.1.1 < 4.1.3)
bluecloth (2.0.4 < 2.0.5)
capistrano (2.5.5 < 2.5.8)
haml (2.0.9 < 2.2.1)
hoe (2.2.0 < 2.3.2)
json (1.1.6 < 1.1.7)
mocha (0.9.5 < 0.9.7)
rest-client (1.0.2 < 1.0.3)
thoughtbot-factory_girl (1.2.1 < 1.2.2)
thoughtbot-shoulda (2.10.1 < 2.10.2)
Run Code Online (Sandbox Code Playgroud)

还有其他人看过这个问题吗?任何疑难解答建议


UPDATE

在预感中,我将ZenTest从4.1.3降级回4.1.1现在一切都恢复正常.

仍然很想知道是否有其他人看过这个或有任何有趣的评论或见解.


$ rake test
(in /Users/me/foo)
/usr/local/bin/ruby -I"lib:test" "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/unit/helpers/users_helper_test.rb" "test/unit/user_test.rb" 
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:105:in `const_missing': uninitialized constant Test::Unit::TestResult::TestResultFailureSupport (NameError)
    from /usr/local/lib/ruby/gems/1.8/gems/test-unit-2.0.2/lib/test/unit/testresult.rb:28
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:158:in `require'
    from /usr/local/lib/ruby/gems/1.8/gems/test-unit-2.0.2/lib/test/unit/ui/testrunnermediator.rb:9
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:158:in `require'
     ... 6 levels...
    from /usr/local/lib/ruby/1.8/test/unit/autorunner.rb:214:in `run'
    from /usr/local/lib/ruby/1.8/test/unit/autorunner.rb:12:in `run'
    from /usr/local/lib/ruby/1.8/test/unit.rb:278
    from /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5
/usr/local/bin/ruby -I"lib:test" "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/functional/users_controller_test.rb"
Run Code Online (Sandbox Code Playgroud)

mad*_*lep 10

如果模块在它们嵌套在其中的父模块尚未加载时在单个语句中声明,则会发生这种情况.我没有看过那些宝石中的代码,但我的预感就是发生了什么.查克的解决方案会暗示.gem 'test-unit'首先调用将加载父模块,因此zen测试的设置最终正常工作.

例如

module Foo::Bar
  def do_stuff
    # insert awesomeness here...
  end
end
Run Code Online (Sandbox Code Playgroud)

如果父Foo模块尚未定义(例如,由另一个gem),将导致错误

宣布这个的更安全的方法是

module Foo
  module Bar
    def do_stuff
      # insert awesomeness here...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

可能是Zentest中需要修补的错误.


Chu*_*uck 5

这显然来自使用Test :: Unit 2.0和旧的Test :: Unit.据RubyForge上的Kouhei Sutou说,它可以通过gem 'test-unit'在你面前调用来修复require 'test/unit'.