我目前的Ruby on Rails项目通过rcov进行测试(特别是相关性rcov,我们有相当高的标准(如果我们的代码覆盖率<95%,我们就会失败).
我们使用以下命令来测试它:
rcov_cmd = "rcov --rails --text-summary \
--include #{included_dirs} \
--exclude #{excluded_dirs} \
--aggregate #{coverage_dir}/coverage.data \
--output #{coverage_dir} \
Run Code Online (Sandbox Code Playgroud)
今天我发现了一些在rcov报告中注册绿色(运行)的代码.Homever,我可以证明这段代码没有运行(我在函数的开头引发异常,我的单元测试通过)
我做了一些研究,发现了rcov的--xrefs标志,我认为这会为rcov报告中的每一行添加所有呼叫者.
我将rcov命令更改为:
rcov_cmd = "rcov --rails --text-summary --xrefs \
--include #{included_dirs} \
--exclude #{excluded_dirs} \
--aggregate #{coverage_dir}/coverage.data \
--output #{coverage_dir} \
Run Code Online (Sandbox Code Playgroud)
(注意添加的--xrefs
标志).
我没有额外的呼叫信息,而是将测试覆盖率从96%提高到48%.
--xrefs是否会改变rcov的分析方式?(我认为它只会收集呼叫信息).这与第一个命令有什么不同/更好?(如果单元测试失败,我已经看到单元测试覆盖率会下降,而且我知道如果运行中出现错误,覆盖百分比会下降,但对我来说看起来不错)
我正在尝试对我用Ruby编写的一段代码进行单元测试File.open
.为了模仿它,我monkeypatched File.open
到以下:
class File
def self.open(name, &block)
if name.include?("retval")
return "0\n"
else
return "1\n"
end
end
end
Run Code Online (Sandbox Code Playgroud)
问题是我使用rcov来运行整个事情,因为它使用File.open来编写代码覆盖率信息,它获得monkeypatched版本而不是真实版本.我如何取消monkeypatch这种方法将其恢复为原始方法?我试过搞乱alias
,但到目前为止无济于事.
在rcov中,有没有办法找到哪些测试方法被跟踪为覆盖了给定的代码行(在您正在测试的目标代码中)?
前言
我刚刚开始深入研究Ruby,并尝试不仅学习语言,还尝试一些开发策略.作为初学者,我专注于测试和行为驱动开发.(是的,我这两个都是为了比较目的)
我正在使用我的小软件项目
在各个地方,我遇到RCov作为一个工具,告诉我我真正测试了多少我的实际代码.
我在我的设置中设置了以下RakeTask Rakefile
用于UnitTests的covarage分析:
desc "Run RCov to get coverage of UnitTests"
Rcov::RcovTask.new(:rcov_units) do |t|
t.pattern = 'tests/**/tc_*.rb'
t.verbose = true
t.rcov_opts << "--html"
t.rcov_opts << "--text-summary"
t.output_dir = "coverage/tests"
end
Run Code Online (Sandbox Code Playgroud)
这工作正常,我得到了一个很好的彩色HTML报告coverage/tests
.
问题简介
类似我为RCov编写了以下RakeTasks,用于我的规范的覆盖率分析:
desc "Run RCov to get coverage of Specs"
Rcov::RcovTask.new(:rcov_spec) do |t|
t.pattern = 'spec/**/*_spec.rb'
t.verbose = true
t.rcov_opts << "--html"
t.rcov_opts << "--text-summary"
t.output_dir = "coverage/spec"
end
Run Code Online (Sandbox Code Playgroud)
问题定义
但是,生成的HTML报告coverage/spec
看起来有点不完整,几乎失败了.
所测试的方法体都没有标记为覆盖,因此是红色.但是,我100%确定它们是在规格范围内执行的.只有线条def method_name(args)
和class ClassName
标记为"绿色".(以及与之相符 …
我正在使用一些前沿的应用程序.Rails 3,RSpec 2,Rspec-Rails2.
似乎RSpec2不包括RSpec 1具有的spec:rcov rake任务.(至少它还没有)
有没有人有幸运行rcov与rspec 2,或编写自己的rake任务来使这项工作?
当rcov生成报告时,它会显示每个文件的"总覆盖率"和"代码覆盖率".这两个指标有什么区别?
这是我的控制器:
class MyController < ApplicationController
include MyHelper
def index
get_list_from_params do |list|
@list = list
respond_to do |format|
format.html
format.xml { render :xml => @list }
format.json { render :json => @list }
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
......它所依据的帮手:
module MyHelper
def get_list_from_params(param = :id, &on_success)
raw_id = params[param]
begin
id = Integer(raw_id)
rescue
render :template => "invalid_id", :locals => {:id => raw_id }
else
yield MyList.new(id)
end
end
end
Run Code Online (Sandbox Code Playgroud)
...和我的功能测试(使用Shoulda):
class MyControllerTest < ActionController::TestCase
context "MyController index" do
setup do …
Run Code Online (Sandbox Code Playgroud) 我写了一个Sinatra应用程序(网站),我想收集网站代码的代码覆盖率信息.我是Ruby的新手,但Google告诉我rcov是一个很好的代码覆盖工具.不幸的是,我在网上找到的所有信息都只显示了如何获取有关测试用例的代码覆盖率信息 - 我想要有关我的网站本身的代码覆盖率信息.
我要配置的特定站点文件位于"sdk"和"sdk/vendor"目录中,因此我通常使用"ruby site.rb"运行我的站点,而是尝试以下操作:
rcov -Isdk -Isdk/vendor site.rb
Run Code Online (Sandbox Code Playgroud)
它显示了Sinatra启动文本,但随后立即退出而不是像我的Sinatra应用程序那样等待Web请求.
有人能告诉我在启用代码覆盖的情况下运行我的网站的诀窍吗?我想运行该网站,用一系列请求点击它,然后停止该网站; 之后,我想查看整个系列请求中累积的代码覆盖率统计信息.
我目前正在使用Ruby 1.8.7.
看起来很有可能为Haml代码获得一个有用的覆盖报告,因为它有一个单一语句的每行结构.
你知道Haml的任何代码覆盖工具吗?也许有些东西在起作用?
我正在尝试为jenkins配置rails项目.有一些测试代码.我正在使用rcov覆盖测试代码.但是当我在jenkins上构建项目时,发现了以下错误.
Publishing rcov report...
rcov report index file wasn't found
Run Code Online (Sandbox Code Playgroud)
在后期制作行动中,我做了必要的步骤."Rcov报告目录"的默认目录是coverage/rcov
任何解决方案
在运行rake spec:rcov
Rails 3应用程序时,spec/
目录中的文件将包含在coverage统计信息中,但我不希望它们包含在内.我只想要我的实际应用程序的覆盖率统计.
在较旧版本的RSpec中,可以使用spec/rcov.opts
带有该行的文件对其进行自定义,--exclude "spec/*"
但似乎Rspec 2不再读取该文件.我尝试创建一个.rcov
文件,因为spec/spec.opts
更改为.rspec
,但是也没有读取.
我在定义rake任务时找到了一些关于如何执行此操作的文档,但我宁愿不覆盖提供的rake任务 - 看起来这必须是其他人试图做的事情.
如何自定义从coverage统计信息中排除的文件?
作为参考,我正在使用的所有相关宝石的版本是:
rails (3.0.5)
rake (0.8.7)
rcov (0.9.9)
rspec (2.5.0,)
rspec-core (2.5.1)
rspec-expectations (2.5.0,)
rspec-mocks (2.5.0)
rspec-rails (2.5.0)
Run Code Online (Sandbox Code Playgroud)