【转】ruby rake执行rspec
RSpec 是Ruby的一个行为驱动开发(BDD)工具,当前的版本是 2.10。根据其入门文档,安装好之后,可以使用 rspec
命令来运行“测试”。但在某些情况下,如果参数较多,使用该命令并不方便;幸运的是,我们可以将 RSpec 添加到 Rake 任务中来运行。
根据文档,只要将如下代码添加到 Rakefile 中即可
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec)
task :default => :spec
观察一下这段代码的内容:
首先加载了 rspec/core/rake_task 文件,该文件并不在 rspec 这个 gem 中,而是在 rspec-core 中,文件路径为 lib/rspec/core/rake_task.rb 。
然后创建了一个 RSpec::Core::RakeTask
实例。 查看其实现可知,它是 ::Rake::TaskLib
的子类。RSpec::Core::RakeTask#initialize
的实现如下:
def initialize(*args)
@name = args.shift || :spec
@pattern, @rcov_path, @rcov_opts, @ruby_opts, @rspec_opts = nil, nil, nil, nil, nil
@warning, @rcov = false, false
@verbose, @fail_on_error = true, true yield self if block_given? @rcov_path ||= 'rcov'
@rspec_path ||= 'rspec'
@pattern ||= './spec{,/*/**}/*_spec.rb' desc("Run RSpec code examples") unless ::Rake.application.last_comment task name do
RakeFileUtils.send(:verbose, verbose) do
if files_to_run.empty?
puts "No examples matching #{pattern} could be found"
else
begin
puts spec_command if verbose
success = system(spec_command)
rescue
puts failure_message if failure_message
end
raise("#{spec_command} failed") if fail_on_error unless success
end
end
end
end
从代码中可以看出,该方法其实很简单,就是读取和设置了一系列默认属性(比如 pattern 设置为 ./spec 目录下的所有以 _spec.rb 结尾的文件),然后使用Rake中常见的 desc
、task
等方法创建了任务。而在 Rakefile 中的 RSpec::Core::RakeTask.new(:spec)
只不过是创建了一个叫 spec 的任务而已。
最后,使用 task :default => :spec
会将名为 spec 的任务设置为默认的,这样在命令行下使用 rake
就会执行 rake sepc
。
再来查看 RSpec::Core::RakeTask#initialize
的 yield self if block_given?
,可以看出,该方法处理了代码块参数,因此可以传递代码块来设置一些属性。比如可以新建一个任务,只运行 ./rspec/user_spec.rb:
desc 'Run User Rspec'
RSpec::Core::RakeTask.new(:user_spec) do |t|
t.pattern = './rspec/user_spec.rb'
end
这样在命令行下执行 rake use_spec
即可
用rake执行不会读取.spec中的配置
需要在rakefile中设置
ENV['SPEC_OPTS'] ||= ''
ENV['SPEC_OPTS'] += ' --format html --out spec/report/results.html'
【转】ruby rake执行rspec的更多相关文章
- 在 Ruby 中执行 Shell 命令的 6 种方法
我们时常会与操作系统交互或在 Ruby 中执行 Shell 命令.Ruby为我们提供了完成该任务的诸多方法. Exec Kernel#exec 通过执行给定的命令来替换当前进程,例如: $ irb & ...
- Ruby(Selenium / Rspec)在Windows 8_64上安装步骤
1.首先需要下载RubyInstaller.exe程序(下载地址随便都能找到). 如:rubyinstaller-2.2.2-x64.exe 安装好Ruby后,需要更新Gems gem update ...
- 怎样高速正确的安装 Ruby, Rails 执行环境
对于新入门的开发人员,怎样安装 Ruby, Ruby Gems 和 Rails 的执行环境可能会是个问题,本页主要介绍怎样用一条靠谱的路子高速安装 Ruby 开发环境. 次安装方法相同适用于产品环境! ...
- ubuntu下ruby文件执行蛋疼的一个问题
ubuntu下面用sublime打开非常简单的一段代码(其实不算代码,因为没有实际语句): #!/usr/bin/ruby 在shell下加入x权限:chmod u+x doit.rb,然后运行 ./ ...
- 用ruby调用执行shell命令
碰到需要调用操作系统shell命令的时候,Ruby为我们提供了六种完成任务的方法: 1.Exec方法: Kernel#exec方法通过调用指定的命令取代当前进程: 例子: $ ...
- Rake::TestTask 介绍
Rake::TestTask 介绍 通常我们创建一个新的项目的时候,会建立一个test或者spec的文件夹来存放测试的文件,运行这些测试需要单独的命令,比如在项目目录下执行rspec .或者ruby ...
- rspec+rest-client测试第三方web service
如果你手工测试Restful 服务将会是一件非常单调乏味的事情.当然,目前有一些浏览器插件可以通过可视化的界面帮助你手工测试,例如postman.rest console,但是每次系统版本更新,你都需 ...
- 如何用rake tasks 生成migration对应的sql
how-to-use-rake-tasks-to-generate-migration-sql Rakefile文件里有load_tasks的方法 http://api.rubyonrails.org ...
- Ruby On Rails环境搭建
注:现在http://rubyforge.org 网站已经停止运行,取而代之的是https://rubygems.org这个网站,下文中所需要的gem包都可以去这个网站搜索下载.其他完全按照下文说的去 ...
随机推荐
- springMVC入门-01
这一系列是在看完网上SpringMVC(基于spring3.0)入门视频之后的个人总结,仅供参考,其中会添加一些个人的见解. 1.搭建SpringMVC所需jar包: org.springframew ...
- iTextSharp 使用详解(转) 感谢原著作者 .
TextSharp是一个生成Pdf文件的开源项目,最近在项目中有使用到这个项目,对使用中的经验作一个小结. ITextSharp中相关的概念: 一.Document 这个对象有三个构造函数: 隐藏行号 ...
- Hadoop配置文件详解
1 获取默认配置 配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知 ...
- Python学习---django之Model语法180124
django之Model语法[Models] 1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1> sqlite django默认使 ...
- magento2常见的命令
常见的命令如下: php bin/magento list 查看所有命令列表 ----------------------------moudule相关的参数------------------ ...
- docker容器修改hosts文件,重启失效问题解决
docker容器修改hosts文件 搜了一大批资料,有说需要在docker run --hosts...改:dockerfile改:有点麻烦,下面方案比较好: 参照docker吧(https://ti ...
- windows2003 iis6配置文件和win2008/2012 iis7.5配置文件
转载某大牛.... 日国外站的单子 :反正跑着玩 简单看下 先 在线web扫描 https://www.yascanner.com/之后发现存在注入漏洞 asp的站 穿山甲可以注入,但是发现是m ...
- canvas抛物线运动demo
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Mint-ui 中 Popup 作为组件引入,控制弹出框的显示与隐藏遇到的问题。
Popup组件的结构: <template> <div> <!--分享弹出窗 begin--> <mt-popup class="s ...
- classlist和array.prototype.slice.call
1.classlist document.getElementById("myDIV").classList.add("mystyle"); classList ...