李哲 — MAY 28, 2015
通常我们创建一个新的项目的时候,会建立一个test或者spec的文件夹来存放测试的文件,运行这些测试需要单独的命令,比如在项目目录下执行rspec.或者ruby test.rb等等,这些测试的工具中大多也都提供了更方便的方式来运行这些测试,但是如果你喜欢用Rake的话,那就有另外一个选择Rake::TestTask

先上代码:

require"rake/testtask"Rake::TestTask.newdo|t|t.libs<<"test"t.pattern="test/*_test.rb"t.verbose=trueend

将以上代码保存或添加到项目目录中的Rakefile,然后在这个目录下执行rake test,你就可以看到如下输出(这里我用的测试框架是Minitest):

/home/lizhe/.rvm/rubies/ruby-2.2.2/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"Runoptions:--seed535#Running:.Finishedin0.000558s,1793.5482runs/s,1793.5482assertions/s.1runs,1assertions,0failures,0errors,0skips

如果去掉最上面代码中的t.verbose = true的话:

require"rake/testtask"Rake::TestTask.newdo|t|t.libs<<"test"t.pattern="test/*_test.rb"end

则输出结果就不会显示执行的ruby命令,如下:

Runoptions:--seed17527#Running:.Finishedin0.001629s,613.9689runs/s,613.9689assertions/s.1runs,1assertions,0failures,0errors,0skipss

这里再介绍一下Rake::TestTask的配置选项:

libs会被添加到$LOAD_PATH中;

pattern测试文件的名称匹配,还有另外一个叫做test_files,这两个使用哪一个都可以,如果同时使用的话,会合并两者;

verbose输出这个Rake::TestTask执行的具体Ruby命令;

options指定给测试框架的参数,类型为数组,也可以通过传入TESTOPTS命令行参数达到相同的目的;

ruby_opts执行ruby命令时的参数,类型为数组,比如可以在指定为-rtesthelper,避免每个测试文件重复require "test_helper"

name Rake Task的名称,默认是test

还有一点,在我们执行rake test的时候,是可以传入一些参数的,比如我执行执行test/dummy_test.rb这个测试,那么就可以指定TEST参数:

raketestTEST=test/dummy_test.rb

还可以通过TESTOPTS给你使用的测试框架传入参数,比如Minitest有-v和-p两个参数,那么就可以这样传进去:

raketestTESTOPTS="-vp"

参考链接:

http://ruby-doc.org/stdlib-2.2.2/libdoc/rake/rdoc/Rake/TestTask.html

本文作者系OneAPM工程师陶炳哲 ,想阅读更多好的技术文章,请访问OneAPM官方技术博客。