关于ruby:如何使用minitest运行所有测试?

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

如你所见,我假设我的文件都在/lib中,我的规范在/spec中,并被命名为whatever_spec.rb

希望它有帮助。


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


这就是Rake::TestTask在引擎盖下所做的,或多或少:

1
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启动的子进程),那么只需使用该命令。


这是我的整个rakefile,我把它放在我的最上面的目录中:

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

为了一次运行所有测试文件,我只需键入rake。就是这样!

确保在每个小型测试文件的顶部都有require 'minitest/autorun'。dir.glob绝对可以与minitest一起使用。

为了获得漂亮的、彩色的minitest输出,以及所有测试方法的名称,我在/test目录中有文件minitest_helper.rb。(必须安装GEM小型测试报告机):

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

运行make将运行所有测试。


$ rake test从轨道5.0箱中用完。


另一种只使用Ruby标准库的方法是使用Dir.glob。在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) }"

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


我意识到这是一个非常古老的问题,但是rake test在Rails 4.2中对我很有用,包括测试/以及测试/集成/测试/单元/等文件。


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

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)