使用rake运行单元测试时使用的minitest的旧版本



我有一些单元测试类,我有一个rake任务来运行这些单元测试。然而,我遇到了一个问题,当测试通过rake运行时,使用的是旧版本的minitest。我怎样才能让rake使用更新的版本?

如果我使用Minitest::Test子类,当测试直接通过ruby运行时,它运行良好命令行。但是,如果我使用以下rake任务:

require 'rake/testtask'
Rake::TestTask.new do |t|
  t.pattern = 'tests/**/*_test.rb'
end

当我使用puts MiniTest::Unit::VERSION检查最小版本时,它在使用ruby运行时打印5.5.0,但在使用rake运行时打印4.3.2。(当使用gem list minitest -d时,4.3.2版本被列为默认)

我想使用新版本的minitest的原因是,当我使用Ruby 2.0直接运行单元测试时,我得到以下警告:

MiniTest::Unit::TestCase is now Minitest::Test.

但是,如果我将MiniTest::Unit::TestCase更改为Minitest::Test,当我使用rake运行测试时,我会得到以下错误:

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rake/ext/module.rb:36:in `const_missing': uninitialized constant MiniTest::Test (NameError)
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/minitest/unit.rb:28:in `const_missing'

我想避免需要对系统配置进行任何更改,因为我希望这些测试在默认的OS X ruby安装上运行。

使用gem 'minitest', '=5.5.0'不会改变使用的最小测试版本

可能性#1:使用bundle exec运行Rake来强制它使用由Bundler管理的Minitest版本:

bundle exec rake test

可能性#2:为项目的Rake创建一个binstub,它会自动加载你的bundle:

bundle binstub rake

之后,您应该能够运行没有bundle exec的Rake以获得相同的结果。

警告:这对我最近使用的Ruby环境管理器有效,但如果它不适合你,你可能需要谷歌周围的解决方案。

Ruby很难从gem而不是标准库加载minitest,所以我们需要给它一点帮助。将以下内容添加到helper或rake任务中:

gem "minitest"

告诉ruby使用gem版本。只是要确保在minitest需要之前添加它。

最新更新