【问题标题】:Rails / Zeus: "MiniTest v5.0.8 is out of date" errorRails / Zeus:“MiniTest v5.0.8 已过时”错误
【发布时间】:2014-01-27 20:54:01
【问题描述】:

我最近设置了 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 gem 中提到的那一行是:

# 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 不是预期的,对吧?

我从我的 Gemfile 中删除了 gem 'turn',运行 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无法弄清楚依赖链,我认为这就是重点。

非常感谢任何建议。

【问题讨论】:

    标签: ruby-on-rails-3.2 bundler minitest zeus


    【解决方案1】:

    目前的解决方案似乎是降级 Minitest:

    gem 'minitest', '~&gt; 4'

    但是,这似乎会在运行特定测试时导致连锁问题,因为我现在在实际运行测试时遇到uninitialized constant MiniTest::Test 错误。

    更新:

    似乎旧版本的 MiniTest 使用了不同的模块/类层次结构,因此 Minitest::Test 必须变为 MiniTest::Unit::TestCase

    注意 Minitest > MiniTest 的大写。

    要查看您的 MiniTest/Minitest 可以使用哪些类,您可以使用:

    MiniTest.constants.select {|c| Class === MiniTest.const_get(c)}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 2013-09-22
      • 1970-01-01
      • 2013-06-04
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多