我下载了一个项目的源代码,发现了一个bug,并修复了它。现在我想进行测试,看看是否有什么东西坏了。测试采用minitest DSL。我如何同时运行它们?我搜索适用的耙任务等,但我没有找到任何。
s71maibg1#
下面是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
tuwxkamq2#
locks的答案更好,但我还想指出,您也可以直接从命令运行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
js81xvg63#
这就是Rake::TestTask的基本功能:
Rake::TestTask
ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb
注意:lib和test/test*.rb(上面)是默认值,但test和test/*_test.rb分别是更典型的值。来源:c34 d9 e0第169行的rake/testtask.rb如果您正在使用JRuby,并且希望避免支付两次启动成本(一次用于Rake,另一次用于Rake启动的子进程),则只需使用该命令。
lib
test/test*.rb
test
test/*_test.rb
bvk5enib4#
下面是我的整个rakefile,我把它放在顶层目录中:
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(必须安装gem minitest-reporters):
rake
require 'minitest/autorun'
minitest_helper.rb
require 'minitest/reporters' Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new) require 'minitest/autorun'
我只需要在每个测试文件的顶部添加require_relative './minitest_helper'。
require_relative './minitest_helper'
mmvthczy5#
这也可以通过Makefile完成。
default: echo "Dir.glob('./test/*_test.rb').each { |file| require file}" | ruby
运行make将运行所有测试。
make
au9on6nz6#
$ rake test从导轨5.0箱中跑出来。
$ rake test
gudnpqoy7#
另一种只使用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或require_relative。在命令行中,require_relative失败,因此我们使用require,但首先通过-I .将当前目录添加到$LOAD_PATH
Dir.glob('**/*Test.rb')
*Test.rb
require
require_relative
-I .
$LOAD_PATH
ars1skjm8#
我知道这是一个很老的问题,但是rake test在Rails4.2中对我很有效,包括test/下的文件以及test/integration/、test/unit/等。
rake test
ftf50wuq9#
如果你没有rake,试试这个: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)
9条答案
按热度按时间s71maibg1#
下面是Rake::TestTask的链接。
页面中有一个示例可帮助您入门。
我会发布另一个我现在正在使用的宝石:
正如您所看到的,我假设我的文件都在
/lib
中,我的规范也在/spec
中,并命名为whatever_spec.rb
tuwxkamq2#
locks的答案更好,但我还想指出,您也可以直接从命令运行minitest,如使用ruby命令。要运行spec/calculator_spec.rb文件中的测试,请运行:
请记住在calculator_spec.rb文件中包含以下代码:
要运行spec/目录中的所有测试,请使用以下命令(更多细节请参见本文Globbing doesn't work with Minitest - Only one file is run)
js81xvg63#
这就是
Rake::TestTask
的基本功能:注意:
lib
和test/test*.rb
(上面)是默认值,但test
和test/*_test.rb
分别是更典型的值。来源:c34 d9 e0第169行的rake/testtask.rb
如果您正在使用JRuby,并且希望避免支付两次启动成本(一次用于Rake,另一次用于Rake启动的子进程),则只需使用该命令。
bvk5enib4#
下面是我的整个
rakefile
,我把它放在顶层目录中:要同时运行我所有的测试文件,我只需输入
rake
。确保在每个Minitest文件的顶部都有
require 'minitest/autorun'
。Dir.glob绝对可以与Minitest一起工作。为了获得漂亮的、彩色的Minitest输出,以及所有测试方法的名称,我在/test目录中有一个文件
minitest_helper.rb
(必须安装gem minitest-reporters):我只需要在每个测试文件的顶部添加
require_relative './minitest_helper'
。mmvthczy5#
这也可以通过Makefile完成。
运行
make
将运行所有测试。au9on6nz6#
$ rake test
从导轨5.0箱中跑出来。gudnpqoy7#
另一种只使用Ruby标准库的方法是使用
Dir.glob
,在一个Ruby文件中,如下所示:或者从命令行,您可以使用以下命令:
Dir.glob('**/*Test.rb')
递归搜索当前目录中与*Test.rb
匹配的任何文件,因此我们只需获取所有这些文件和require
或require_relative
。在命令行中,require_relative
失败,因此我们使用require
,但首先通过-I .
将当前目录添加到$LOAD_PATH
ars1skjm8#
我知道这是一个很老的问题,但是
rake test
在Rails4.2中对我很有效,包括test/下的文件以及test/integration/、test/unit/等。ftf50wuq9#
如果你没有rake,试试这个:
http://blog.gingergriffis.com/post/85871430778/ruby-how-to-run-all-tests-in-a-directory