如何用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
注意: lib
& test/test*.rb
(以上)是默认值,但test
& test/*_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
文件,所以我们只需要取得所有这些文件,并require
或require_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)