NameError: неинициализированная константа Test :: Unit :: AssertionFailedError при обновлении до rails3 - PullRequest
5 голосов
/ 07 сентября 2010

Я пытаюсь обновить приложение rails до Rails3.

Когда я запускаю функциональные тесты, я получаю много NameError: uninitialized constant Test::Unit::AssertionFailedError ошибок.Но модульные тесты и сам веб-сайт, кажется, работают нормально.

Трассировка выглядит следующим образом:

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'

Оба драгоценных камня Должа и Amazon S3 являются последними версиями.

Любые идеи, чтоЯ делаю не так?

Ответы [ 2 ]

6 голосов
/ 17 ноября 2011

Решение Ash Berlin исключит исключение, но все совпадения, которые try и catch Test::Unit::AssertionFailedError не пройдутЕсли AssertionFailedError является ActiveSupport::TestCase::Assertion, и вы бросаете ActiveSupport::TestCase::Assertion, вы не поймаете его как Test::Unit::AssertionFailedError.У него наследственные отношения в обратном направлении.Вместо этого поместите это в ваш test_helper.rb:

unless defined?(Test::Unit::AssertionFailedError)
  Test::Unit::AssertionFailedError = ActiveSupport::TestCase::Assertion
end
6 голосов
/ 20 сентября 2010

Об этом сообщалось http://github.com/thoughtbot/shoulda/issues/issue/117.

Обходной путь (который по крайней мере устраняет эту ошибку, не уверен, что она на самом деле работает правильно):

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