NameError:升级到rails3时未初始化的常量Test :: Unit :: AssertionFailedError

时间:2010-09-07 10:53:29

标签: ruby-on-rails testing ruby-on-rails-3 amazon-s3 shoulda

我正在尝试将我的rails应用程序升级到Rails3。

当我运行功能测试时,我会收到很多NameError: uninitialized constant Test::Unit::AssertionFailedError错误。但单元测试和网站本身似乎工作正常。

Trace看起来像这样:

NameError: uninitialized constant Test::Unit::AssertionFailedError
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/gems/aws-s3-0.6.2/lib/aws/s3/extensions.rb:206:in `const_missing_from_s3_library'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb:52:in `rescue in redirects_to_url?'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb:48:in `redirects_to_url?'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb:35:in `matches?'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/assertions.rb:53:in `assert_accepts'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/context.rb:324:in `block in should'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/context.rb:382:in `call'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/context.rb:382:in `block in create_test_from_should_hash'

Shoulda和Amazon S3宝石都是最新版本。

任何想法我做错了什么?

2 个答案:

答案 0 :(得分:6)

据报道http://github.com/thoughtbot/shoulda/issues/issue/117

解决方法(至少会让这个错误消失,不确定实际是否正常)是:

unless defined?(Test::Unit::AssertionFailedError)
  class Test::Unit::AssertionFailedError < ActiveSupport::TestCase::Assertion
  end
end

答案 1 :(得分:6)

Ash Berlin的解决方案将使例外消失,但它会使trycatch Test::Unit::AssertionFailedError失败的任何匹配器。如果AssertionFailedErrorActiveSupport::TestCase::Assertion,而您抛出ActiveSupport::TestCase::Assertion,则不会将其视为Test::Unit::AssertionFailedError。他的继承关系倒退了。相反,请将其放在test_helper.rb

unless defined?(Test::Unit::AssertionFailedError)
  Test::Unit::AssertionFailedError = ActiveSupport::TestCase::Assertion
end