通常我们创建一个新的项目的时候,会建立一个
test
或者
spec
的文件夹来存放测试的文件,运行这些测试需要单独的命令,比如在项目目录下执行
rspec
.或者
ruby test.rb
等等,这些测试的工具中大多也都提供了更方便的方式来运行这些测试,但是如果你喜欢用
Rake
的话,那就有另外一个选择
Rake::TestTask
。
先上代码:
require "rake/testtask"
Rake::TestTask.new do |t|
t.libs << "test"
t.pattern = "test/*_test.rb"
t.verbose = true
end
将以上代码保存或添加到项目目录中的
Rakefile
,然后在这个目录下执行
rake test
,你就可以看到如下输出(这里我用的测试框架是
Minitest
):
/home/lizhe/.rvm/rubies/ruby-/bin/ruby -I"lib:test" "/home/lizhe/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/rake/rake_test _loader.rb" "test/person_test.rb"
Run options: --seed 535
# Running:
.
Finished in s, runs/s, assertions/s.
runs, assertions, failures, errors, skips
如果去掉最上面代码中的
t.verbose = true
的话:
require "rake/testtask"
Rake::TestTask.new do |t|
t.libs << "test"
t.pattern = "test/*_test.rb"
end
则输出结果就不会显示执行的
ruby
命令,如下:
Run options: --seed 17527
# Running:
.
Finished in s, runs/s, assertions/s.
runs, assertions, failures, errors, skips
这里再介绍一下
Rake::TestTask
的配置选项:
会被添加到
libs
中;
$LOAD_PATH
测试文件的名称匹配,还有另外一个叫做
pattern
,这两个使用哪一个都可以,如果同时使用的话,会合并两者;
test_files
输出这个
verbose
执行的具体Ruby命令;
Rake::TestTask
指定给测试框架的参数,类型为数组,也可以通过传入
options
命令行参数达到相同的目的;
TESTOPTS
执行ruby命令时的参数,类型为数组,比如可以在指定为
ruby_opts
,避免每个测试文件重复
-rtesthelper
;
require "test_helper"
的名称,默认是
name Rake Task
;
test
还有一点,在我们执行
rake test
的时候,是可以传入一些参数的,比如我执行执行
test/dummy_test.rb
这个测试,那么就可以指定TEST参数:
rake test TEST=test/dummy_test.rb
还可以通过
TESTOPTS
给你使用的测试框架传入参数,比如
Minitest
有-v和-p两个参数,那么就可以这样传进去:
rake test TESTOPTS="-vp"
参考链接:http://ruby-doc.org/stdlib-2.2.2/libdoc/rake/rdoc/Rake/TestTask.html
本文系OneAPM工程师编译整理。OneAPM是中国基础软件领域的新兴领军企业。专注于提供下一代应用性能管理软件和服务,帮助企业用户和开发者轻松实现:缓慢的程序代码和SQL语句的实时抓取。想阅读更多技术文章,请访问OneAPM官方技术博客。