我下载了项目的源代码,发现了一个错误并修复了它。
现在我想运行测试以确定我是否已经破坏了任何东西。
测试采用最小的DSL。
如何一次性运行它们?
我搜索了适用的佣金任务等,但我没有找到任何。
答案 0 :(得分:86)
以下是指向Rake::TestTask的链接。
页面中有一个示例可以帮助您入门 我将发布另一个我正在使用的宝石:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.pattern = "spec/*_spec.rb"
end
正如您所看到的,我认为我的文件都在/lib
,并且我的规格位于/spec
并且名为whatever_spec.rb
希望它有所帮助。
答案 1 :(得分: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
答案 2 :(得分:18)
这就是Rake::TestTask
或多或少的内容:
ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb
注意:lib
& test/test*.rb
(上方)是默认值,但test
& test/*_test.rb
分别更为典型。
来源:rake/testtask.rb at c34d9e0 line 169
如果您正在使用JRuby并且希望避免支付启动成本两次(一次用于Rake,然后一次用于Rake启动的子进程),只需使用该命令。
答案 3 :(得分: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'
位于每个测试文件的顶部。
答案 4 :(得分:6)
这也可以通过Makefile完成。
default:
echo "Dir.glob('./test/*_test.rb').each { |file| require file}" | ruby
运行make
将运行所有测试。
答案 5 :(得分: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
匹配的任何文件,因此我们只需获取所有这些文件,然后require
或require_relative
。从命令行,require_relative
失败,因此我们使用require
,但首先将当前目录添加到$LOAD_PATH
到-I .
答案 6 :(得分:3)
$ rake test
用完了导轨5.0框。
答案 7 :(得分:0)
我意识到这是一个非常老的问题,但是rake test
在Rails 4.2中对我有用,包括test //以及test / integration /,test / unit /等文件。
答案 8 :(得分:-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)