Rails / Zeus: MiniTest v5.0.8 устарел ошибка

Недавно я настроил Zeus и Minitest для тестирования приложения Rails.

Однако я получил следующую ошибку:

leo% zeus test
/Users/leo/.rvm/gems/ruby-1.9.3-p125@backscratchers/gems/turn-0.9.6/lib/turn/minitest.rb:23:in `<top (required)>': MiniTest v5.0.8 is out of date.
`gem install minitest` and add `gem 'minitest' to you test helper. (RuntimeError)
  from /Users/leo/.rvm/gems/ruby-1.9.3-p125@backscratchers/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require'
  from /Users/leo/.rvm/gems/ruby-1.9.3-p125@backscratchers/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `block in require'
  ... etc ...

Строка, упомянутая в камне Turn:

# set MiniTest's runner to Turn::MiniRunner instance
if MiniTest::Unit.respond_to?(:runner=)
  MiniTest::Unit.runner = Turn::MiniRunner.new
else
  raise "MiniTest v#{MiniTest::Unit::VERSION} is out of date.\n" \
        "`gem install minitest` and add `gem 'minitest' to you test helper."
  #MiniTest::Unit = Turn::MiniRunner
end

Так что «устаревшее», возможно, немного вводит в заблуждение. На самом деле это означает, что API не соответствует ожиданиям, верно?

Я удалил gem 'turn' из своего Gemfile, запустил bundle install и перезапустил Zeus.

Теперь я получаю:

/Users/leo/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/test/unit.rb:328:in `autorun': uninitialized class variable @@installed_at_exit in Test::Unit::Runner (NameError)
  from /Users/leo/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/test/unit.rb:640:in `<top (required)>'
  from /Users/leo/.rvm/gems/ruby-1.9.3-p125@backscratchers/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require'
  from /Users/leo/.rvm/gems/ruby-1.9.3-p125@backscratchers/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `block in require'
  from /Users/leo/.rvm/gems/ruby-1.9.3-p125@backscratchers/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:236:in `l
... etc ...

Что тут происходит? У меня как-то не та версия Minitest? Я подумал, что почему Bundler не смог выяснить цепочку зависимостей.

Любые предложения приветствуются.


person Leo    schedule 30.10.2013    source источник


Ответы (1)


Что ж, немедленным решением является понижение версии Minitest:

gem 'minitest', '~> 4'

Однако это, похоже, вызывает проблемы при запуске конкретного теста, так как теперь я получаю uninitialized constant MiniTest::Test ошибки при фактическом запуске тестов.

Обновление:

Похоже, что в более старых версиях MiniTest использовалась другая иерархия модулей / классов, поэтому Minitest::Test должен стать MiniTest::Unit::TestCase.

Обратите внимание на заглавные буквы Minitest> MiniTest.

Чтобы узнать, какие классы доступны для вашего MiniTest / Minitest, вы можете использовать:

MiniTest.constants.select {|c| Class === MiniTest.const_get(c)}
person Leo    schedule 30.10.2013