如何用minitest运行所有testing?

我下载了一个项目的源代码,发现了一个bug,并修复了它。

现在我想运行testing,看看我是否已经破坏了任何东西。

testing是在最小的DSL。

我如何一次运行它们?

我search适用的耙任务等,但我没有find任何。

这是一个链接到Rake :: TestTask 。

在页面中有一个例子让你开始。
我会张贴另一个我现在正在使用的gem:

require 'rake/testtask' Rake::TestTask.new do |t| t.pattern = "spec/*_spec.rb" end 

正如你所看到的,我假设我的文件都在/lib ,并且我的规格在/spec并且被命名为whatever_spec.rb

希望能帮助到你。

锁'的答案是更好的,但我也想指出,你也可以像使用ruby命令一样直接从命令运行minitest。 要运行spec / calculator_spec.rb文件中的testing运行:

 $ ruby spec/calculator_spec.rb 

请记住在calculator_spec.rb文件中包含以下代码:

 require 'minitest/spec' require 'minitest/autorun' 

要运行spec /目录中的所有testing,请使用以下命令(请参阅此文章以获取更多详细信息Globbing不适用于Minitest – 仅运行一个文件 )

 $ for file in spec/*.rb; do ruby $file; done 

这就是Rake::TestTask所做的事情,或多或less:

 ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb 

注意: libtest/test*.rb (以上)是默认值,但testtest/*_test.rb分别更典型。

资料来源: rake / testtask.rb在c34d9e0第169行

如果您使用的是JRuby,并且要避免两次支付启动成本(一次是Rake,一次是Rake启动的subprocess),那么只需使用该命令即可。

这里是我整个rakefile ,我把它放在我的顶级目录:

 task :default => :test task :test do Dir.glob('./test/*_test.rb').each { |file| require file} end 

要一次运行我所有的testing文件,只需inputrake 。 而已!

确保在每个Minitest文件的顶部都require 'minitest/autorun' 。 Dir.glob绝对能与Minitest合作。

为了得到漂亮的彩色Minitest输出,以及所有testing方法的名字,我在/ test目录下有minitest_helper.rb文件。 (必须安装gem微型记者):

 require 'minitest/reporters' Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new) require 'minitest/autorun' 

我只需要require_relative './minitest_helper'在我的每个testing文件的顶部。

这也可以通过Makefile完成。

 default: echo "Dir.glob('./test/*_test.rb').each { |file| require file}" | ruby 

运行make将运行所有的testing。

使用Ruby的标准库的另一种方法是使用Dir.glob 。 从一个ruby文件中,这看起来像这样:

 require "minitest/autorun" Dir.glob("**/*Test.rb") { |f| require_relative(f) } 

或者从命令行,你可以使用这个命令:

 ruby -I . -e "require 'minitest/autorun'; Dir.glob('**/*Test.rb') { |f| require(f) }" 

Dir.glob('**/*Test.rb')recursion地search当前目录中的任何匹配*Test.rb文件,所以我们只需要取得所有这些文件,并requirerequire_relative它们。 在命令行中, require_relative失败,所以我们使用require但首先通过-I .将当前目录添加到$LOAD_PATH -I .

$ rake test跑出了rails 5.0的盒子。

如果你没有耙子,试试这个:

http://blog.gingergriffis.com/post/85871430778/ruby-how-to-run-all-tests-in-a-directory

 # 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)