How to run all tests with minitest?
我下载了一个项目的源代码,发现了一个bug,并修复了它。
现在我想运行测试来找出是否有任何损坏。
测试是在微型测试DSL中进行的。
我如何同时运行它们?
我搜索了适用的rake任务等,但没有找到。
这里有一个到rake::testtask的链接。
页面中有一个示例可以让您入门。我将发布另一个我现在正在使用的宝石:
1 2 3 4 5 | require 'rake/testtask' Rake::TestTask.new do |t| t.pattern ="spec/*_spec.rb" end |
如你所见,我假设我的文件都在
希望它有帮助。
locks的答案更好,但我还想指出,您也可以直接从命令运行minitest,就像使用ruby命令一样。要在spec/calculator_spec.rb文件中运行测试,请运行:
1 | $ ruby spec/calculator_spec.rb |
请记住,在calculator_spec.rb文件中包含以下代码:
1 2 | require 'minitest/spec' require 'minitest/autorun' |
要运行spec/目录中的所有测试,请使用以下命令(有关详细信息,请参阅本文章),globbing不适用于minitest-只运行一个文件)
1 | $ for file in spec/*.rb; do ruby $file; done |
这就是
1 | ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb |
注:以上
来源:rake/testtask.rb,位于c34d9e0第169行
如果您使用的是JRuby,并且希望避免两次支付启动成本(一次用于Rake,然后一次用于Rake启动的子进程),那么只需使用该命令。
这是我的整个
1 2 3 4 | task :default => :test task :test do Dir.glob('./test/*_test.rb').each { |file| require file} end |
为了一次运行所有测试文件,我只需键入
确保在每个小型测试文件的顶部都有
为了获得漂亮的、彩色的minitest输出,以及所有测试方法的名称,我在/test目录中有文件
1 2 3 | require 'minitest/reporters' Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new) require 'minitest/autorun' |
我只需要在我的每个测试文件的顶部添加cx1(12)。
这也可以通过makefile来完成。
1 2 | default: echo"Dir.glob('./test/*_test.rb').each { |file| require file}" | ruby |
运行
另一种只使用Ruby标准库的方法是使用
1 2 3 | require"minitest/autorun" Dir.glob("**/*Test.rb") { |f| require_relative(f) } |
或者从命令行中,可以使用以下命令:
1 | ruby -I . -e"require 'minitest/autorun'; Dir.glob('**/*Test.rb') { |f| require(f) }" |
我意识到这是一个非常古老的问题,但是
如果你没有耙子,试试这个:
http://blog.gingergrifis.com/post/85871430778/ruby-how-to-run-all-tests-in-a-目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # run_all_tests.rb require 'find' require 'optparse' options = { :exclude => [], } OptionParser.new do |opts| opts.on('--exclude Comma Separated String', 'Test scripts to exclude') do |css| options[:exclude] = css.split(',') end end.parse! commands = [] Find.find(File.dirname(__FILE__)) do |path| Find.prune if path =~ /#{__FILE__}$/ if !File.directory?(path) && (path =~ /(.*)\.rb$/) if options[:exclude].none? {|e| path.include?(e)} commands <<"ruby #{path}" end end end command_string = commands.join(" &&") exec(command_string) |