我下载了一个项目的源代码,发现了一个错误,并修复了它。
现在我想做些测试看看我有没有弄坏什么东西。
测试使用最小的 DSL。
如何同时运行它们?
我寻找适用的耙子任务等,但我没有找到任何。
这是 Rake: : TestTask的链接。
页面中有一个例子可以帮助您开始。 我将发布另一个我正在使用的宝石:
require 'rake/testtask' Rake::TestTask.new do |t| t.pattern = "spec/*_spec.rb" end
正如您所看到的,我假设我的文件都在 /lib中,我的规范在 /spec中,并且命名为 whatever_spec.rb
/lib
/spec
whatever_spec.rb
希望能有帮助。
Lock 的答案更好,但是我还想指出,您也可以直接从命令运行 minitest,比如使用 ruby 命令。在 spec/Calculator _ spec 中运行测试。Rb 文件运行:
$ ruby spec/calculator_spec.rb
请记住在 Calculator _ spec. rb 文件中包含以下代码:
require 'minitest/spec' require 'minitest/autorun'
要运行 spec/目录中的所有测试,请使用以下命令(有关更多详细信息,请参阅本文 Globbing 不与 Minitest 工作-只有一个文件运行)
$ for file in spec/*.rb; do ruby $file; done
这或多或少是 Rake::TestTask在引擎盖下所做的:
Rake::TestTask
ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb
注意: lib和 test/test*.rb(以上)是默认值,但 test和 test/*_test.rb分别更典型。
lib
test/test*.rb
test
test/*_test.rb
资料来源: Rake/testtask.rb at c34d9e0 line 169
如果您正在使用 JRuby,并且希望避免支付两次启动成本(一次为 Rake,一次为 Rake 启动的子进程) ,只需使用该命令。
这是我的整个 rakefile,我把它放在我的 top 目录中:
rakefile
task :default => :test task :test do Dir.glob('./test/*_test.rb').each { |file| require file} end
要一次运行所有的测试文件,我只需键入 rake!
rake
确保在每个 Minitest 文件的顶部都有 require 'minitest/autorun'。
require 'minitest/autorun'
为了获得漂亮的、彩色的 Minitest 输出,以及所有测试方法的名称,我在/test 目录中放置了文件 minitest_helper.rb。(不得不安装宝石最小记者) :
minitest_helper.rb
require 'minitest/reporters' Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new) require 'minitest/autorun'
我只需要在每个测试文件的顶部添加 require_relative './minitest_helper'。
require_relative './minitest_helper'
如果你没有耙子,试试这个:
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)
这也可以通过 Makefile 完成。
default: echo "Dir.glob('./test/*_test.rb').each { |file| require file}" | ruby
运行 make将运行所有测试。
make
另一种只使用 Ruby 标准库的方法是使用 Dir.glob。在 Ruby 文件中,这看起来是这样的:
Dir.glob
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匹配的任何文件,所以我们只需获取所有这些文件和它们。在命令行中,require_relative失败了,所以我们使用 require,但是首先通过 -I .将工作目录添加到 $LOAD_PATH
Dir.glob('**/*Test.rb')
*Test.rb
require_relative
require
-I .
$LOAD_PATH
$ rake test跑出了轨道5.0箱。
$ rake test
我知道这是一个非常老的问题,但是 rake test在 Rails 4.2中对我很有用,包括 test/以及 test/Integration/、 test/unit/等文件。
rake test