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

时间:2015-07-21 10:00:23

标签: ruby macos 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'不会更改使用的minitest版本。

2 个答案:

答案 0 :(得分:2)

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

bundle exec rake test

可能性#2:为项目创建一个binstub,用于自动加载包的项目:

bundle binstub rake

之后,你应该可以在没有bundle exec的情况下运行Rake来获得相同的结果。

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

答案 1 :(得分:2)

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

gem "minitest"

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