我有一些单元测试的类,我有一个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版本。
答案 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之前添加它。