【转】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包都可以去这个网站搜索下载.其他完全按照下文说的去 ...
随机推荐
- 新特性之MAPI over HTTP \ 配置 MAPI over HTTP
Exchange 2016 中的 MAPI over HTTP https://docs.microsoft.com/zh-cn/Exchange/clients/mapi-over-http/map ...
- 10个值得深思的PHP面试题
第一个问题关于弱类型 $str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)) { echo "/"" ...
- CentOS 6 各种启动文件损坏及修复
stage1 mbr的破坏和恢复 清空mbr 前446字节 dd if=/dev/zero of=/dev/sda bs=1 count=446 如果没有挂载启动光盘,会显示这样 如果启动前挂载了光盘 ...
- Python 处理脚本的命令行参数(二):使用click
安装click pip install click 使用步骤 使用@click.command() 装饰一个函数,使之成为命令行接口 使用@click.option() 等装饰函数,为其添加命令行选项 ...
- IOS Charles(代理服务器软件,可以用来拦截网络请求)
什么是Charles Charles是一款代理服务器软件,可以用来拦截网络请求 利用Charles能得知大部分公司app的数据来源和数据格式 下载地址:http://www.charlesproxy. ...
- AngularJs学习笔记--Using $location
原版地址:http://code.angularjs.org/1.0.2/docs/guide/dev_guide.services.$location 一.What does it do? $loc ...
- django创建项目问题解决办法
问题描述: Python编程:从入门到实践第十八章18.1.6 ❶(ll_env)learning_log$ django-admin.py startproject learning_log .❷ ...
- JavaScript脚本的执行原理?
JavaScript是一种动态.弱类型.基于原型的语言,通过浏览器可以直接执行. 当浏览器遇到\<script>标记的时候,浏览器会执行之间的JavaScript代码.嵌入的js代码是顺序 ...
- jq页面加载问题
Window.onload=function(){ //页面加载,不能同时编写多个,最后面的会覆盖前面的 } $(document).ready(function(){ //页面加载,能同时编写多 ...
- java把行政区划放到一个节点树形中
作者原创:转载请注明出处.https://www.cnblogs.com/yunqing/p/9486923.html 先放数据,t_city表 //津京冀地区行政区划数据 SET FOREIGN_K ...