尝试运行测试时获取未初始化的常量错误
我刚刚更新了所有的gem,我发现在尝试运行Test :: Unit测试时我遇到了错误。 我收到下面复制的错误。 这来自于创建新的空Rails项目,搭建一个简单的模型,以及运行rake test
。
尝试谷歌搜索“未初始化的常量”和TestResultFailureSupport。 我发现的唯一一件事是2007年的这个错误报告 。
我正在使用OS X.
这些是我在测试停止工作之前更新的gem:
$ 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)
还有其他人看过这个问题吗? 任何疑难解答建议
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"
如果模块在它们嵌套在其中的父模块尚未加载时在单个语句中声明,则会发生这种情况。 我没有看过那些gem中的代码,但我的预感就是发生了什么。 查克的解决方案会暗示这一点。 首先调用gem 'test-unit'
将加载父模块,因此zen测试的设置最终正常工作。
例如
module Foo::Bar def do_stuff # insert awesomeness here... end end
如果父Foo模块尚未定义(例如,由另一个gem),将导致错误
宣布这个的更安全的方法是
module Foo module Bar def do_stuff # insert awesomeness here... end end end
可能是Zentest中需要修补的错误。
这显然来自使用Test :: Unit 2.0和旧的Test :: Unit。 根据RubyForge上的Kouhei Sutou, 可以通过在require 'test/unit'
之前调用gem’test gem 'test-unit'
来修复它。
由于此链接建议http://floehopper.lighthouseapp.com/projects/22289-mocha/tickets/50 ,可能会由于mocha lib的初步初始化而发生。 为了防止它发生,建议添加线
config.gem 'test-unit', :lib => 'test/unit'
to config / environment.rb
以下是Rails 2.3.5上test_unit 2.0.7的配方:
在config / environments / test.rb中:
config.gem 'test-unit', :version => '2.0.7', :lib => false
在test_helper.rb中,在require’test_help require 'test/unit'
之后立即添加require’test require 'test/unit'
require 'test_help'
所以它看起来像这样:
require 'test_help' require 'test/unit'
如果收到此错误: %': one hash required (ArgumentError)
,将gem i18n
升级到v0.3.6。
我没有安装摩卡或者应该安装它。
这篇文章表明这是由于test-unit> = 2.0中的不兼容性 ,我作为systools gems的依赖项安装。 降级到1.2.3对我有用,一个简单的要求也可能。
我也一样。 除了将测试单元降级回1.2.3之外,上面没有提及任何内容对我有用我错过了测试单元2.x的着色
找到(丑陋)解决方案:
Rakefile
gem 'unit/test'
必须在测试中调用,而不仅仅是在Rakefile
。
今天我在Mac OS X 10.6上遇到了这个问题。 我的解决方案如下:
config.gem'test-unit',: lib =>'test / unit',:version =>'1.2.3' config.gem'autotest' config.gem'黄瓜' config.gem'gellow-rails',: lib => false config.gem'ffaker',:lib =>'faker' config.gem'rspec',:lib => false,:version =>'> = 1.2.0' config.gem'rspec-rails',:lib => false,:version =>'> = 1.2.0' config.gem'selenium-client',:lib =>'selenium' config.gem“thoughtbot-factory_girl”,:lib =>'factory_girl',:source =>“http://gems.github.com” config.gem'methbot-shoulda',:lib =>'shoulda' config.gem'webrat' config.gem'ZenTest',:lib =>'zentest'
与aronchick的评论一样,对我来说(OS X 10.6)解决方案是
sudo gem uninstall test-unit
所有版本。
你可以通过类似的东西再次使用auto_test
RUBY="ruby -I.:lib:test -rubygems -e 'gem \"test-unit\"'" autotest
我不是铁杆,但我仍在学习,希望永远是:-)。
使用Ruby Enterprise Edition和乘客的Rails 2.3生产环境在启动期间会产生完全误导性的无用错误(/var/log/passenger.log)。 就像是:
PhusionPassenger :: Rack :: ApplicationSpawner中的exceptionNameError(未初始化的常量XXX)
如果在生产服务器上运行脚本/控制台,您可能会看到:
Loading production environment (Rails 2.3.4) /home/ubuntu/MyApp/shared/bundle/ruby/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:105:in const_missing:NameError: uninitialized constant XXX
在这种情况下,仅在生产环境中发生这种情况,而不是分期,而不是开发。 经过一整天的研究和实验,我得出结论,在生产环境中,REE或其他东西必须预加载类,而预加载器显然不希望看到类在创建之前被重新打开(有根据的猜测)。
在app / models / calendar.rb中:
Class Calendar < ActiveRecord::Base # This defines the class End
在app / models / event.rb中
Class Event < ActiveRecord::Base # This desined the class End Class Calendar # This is supposed to 're-open' the Calendar class has_many :events end
上面的通用示例代码段可能会导致启动问题。 我不确定预加载类的发生顺序,但我怀疑这可能是问题所在。 我将'has_many:events'移动到app / modeles / calendar.rb中的类定义中,我的应用程序现在启动时没有错误。
因此,遵循的一个好规则是将您的Active Record Associations(has_many,belongs_to)放在定义类(创建类的位置)中。
如果将以下行添加到environment.rb或config / environments / test.rb中,则应解决此问题
config.gem "test-unit", :lib => "test/unit", :version => ">=2.0.9", :env => "test"
我相信如果你使用摩卡,你需要在摩卡线之前添加它。