如何使用minitest运行所有测试?

问题描述 投票:65回答:9

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

现在我想运行测试以查明我是否已经破坏了任何东西。

测试采用最小的DSL。

我如何一次运行它们?

我搜索了适用的rake任务等,但我没有找到任何。

ruby minitest
9个回答
87
投票

这是Rake::TestTask的链接。

页面中有一个示例可以帮助您入门。 我将发布另一个我正在使用的宝石:

require 'rake/testtask'

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

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

希望能帮助到你。


24
投票

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

$ ruby spec/calculator_spec.rb 

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

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

要在spec /目录中运行所有测试,请使用以下命令(有关详细信息,请参阅此文章Globbing doesn't work with Minitest - Only one file is run

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

18
投票

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

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

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

资料来源:rake/testtask.rb at c34d9e0 line 169

如果您正在使用JRuby并希望避免支付启动成本两次(一次用于Rake,然后一次用于Rake启动的子进程),只需使用该命令即可。


13
投票

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

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

要一次运行我的所有测试文件,我只需输入rake。而已!

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

为了得到漂亮的,有色的Minitest输出,以及我所有测试方法的名称,我的/ test目录中有minitest_helper.rb文件。 (不得不安装宝石minitest-记者):

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

我只需要在每个测试文件的顶部使用require_relative './minitest_helper'


6
投票

这也可以通过Makefile完成。

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

运行make将运行所有测试。


3
投票

使用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')递归搜索当前目录中任何与*Test.rb匹配的文件,因此我们只需要获取所有这些文件和requirerequire_relative。从命令行,require_relative失败,所以我们使用require但首先通过$LOAD_PATH将当前目录添加到-I .


3
投票

$ rake test用完了导轨5.0的盒子。


0
投票

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


-1
投票

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

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)
© www.soinside.com 2019 - 2024. All rights reserved.