我刚更新了所有的宝石,我发现在尝试运行Test :: Unit测试时我遇到了错误。我收到下面复制的错误。这来自于创建新的空Rails项目,搭建一个简单的模型,并运行rake test
。
尝试使用Google搜索“未初始化的常量”和TestResultFailureSupport。我发现的唯一一件事就是2007年this bug report。
我正在使用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)
还有其他人看过这个问题吗?任何疑难解答建议?
在预感中,我将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"
答案 0 :(得分:10)
如果模块在嵌套在其中的父模块尚未加载时在单个语句中声明,则会发生这种情况。我没有看过那些宝石中的代码,但我的预感就是发生了什么。查克的解决方案会暗示。首先调用gem 'test-unit'
将加载父模块,因此zen测试的设置最终正常工作。
e.g。
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中需要修补的错误。
答案 1 :(得分:5)
这显然来自使用Test :: Unit 2.0和旧的Test :: Unit。根据RubyForge上的Kouhei Sutou,gem 'test-unit'
在你require 'test/unit'
之前调用{{1}}。{/ p>
答案 2 :(得分:3)
正如此链接所示http://floehopper.lighthouseapp.com/projects/22289-mocha/tickets/50 它可能由于mocha lib的初步初始化而发生。 为了防止它发生,建议添加行
config.gem 'test-unit', :lib => 'test/unit'
到config / environment.rb
答案 3 :(得分:3)
以下是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/unit'
,
在require 'test_help'
之后立即
所以它看起来像这样:
require 'test_help'
require 'test/unit'
如果您收到此错误:
%': one hash required (ArgumentError)
,
将gem i18n
升级到v0.3.6。
答案 4 :(得分:1)
我没有使用mocha或者应该安装它。
This post suggests it's due to an incompatibility in test-unit >= 2.0,我作为systools gems的依赖项安装。降级到1.2.3对我有用,也可能是一个简单的要求。
答案 5 :(得分:1)
我也一样。 除了将测试单元降级回1.2.3之外,上述任何内容都不适用于我 我错过了测试单元2.x的着色
答案 6 :(得分:1)
找到(丑陋的)解决方案:
gem 'unit/test'
必须在测试中调用,而不仅仅是Rakefile
。
答案 7 :(得分:1)
今天我在Mac OS X 10.6上遇到了这个问题。我的解决方案如下:
config.gem 'test-unit', :lib => 'test/unit', :version => '1.2.3' config.gem 'autotest' config.gem 'cucumber' config.gem 'cucumber-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 'thoughtbot-shoulda', :lib => 'shoulda' config.gem 'webrat' config.gem 'ZenTest', :lib => 'zentest'
答案 8 :(得分:1)
与aronchick的评论一样,对我来说(OS X 10.6)解决方案是
sudo gem uninstall test-unit
所有版本。
答案 9 :(得分:1)
你可以通过类似
的方式再次使用auto_testRUBY="ruby -I.:lib:test -rubygems -e 'gem \"test-unit\"'" autotest
答案 10 :(得分:1)
我不是铁杆,但我仍然在学习,希望永远都是: - )。
使用Ruby Enterprise Edition和乘客的Rails 2.3生产环境在启动期间会产生完全误导性的无用错误(/var/log/passenger.log)。类似的东西:
PhusionPassenger中的异常NameError :: Rack :: ApplicationSpawner(未初始化的常量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)放在定义类(创建类的位置)中。
答案 11 :(得分:0)
如果您将以下行添加到environment.rb或config / environments / test.rb中,这应解决问题
config.gem "test-unit", :lib => "test/unit", :version => ">=2.0.9", :env => "test"
我相信如果你使用mocha,你需要在mocha线之前添加它。