RSpec 2的RCov没有正确检测覆盖范围?(不是Rails!)



前言
我刚开始接触Ruby,不仅尝试学习语言,还尝试学习一些开发策略。作为一个初学者,我专注于测试和行为驱动开发。(是的,我做这两件事都是为了比较)

在我的小软件项目中,我使用

  • UnitTest(TDD)
  • 黄瓜(BDD)
  • Rspec(TDD和BDD)

在不同的地方,我遇到了RCov作为一个工具,告诉我我真正测试了多少实际代码。

我在Rakefile中设置了以下RakeTask,用于UnitTests的Covage分析:

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

这很好用,我在coverage/tests中得到了一个漂亮的彩色HTML报告。

问题简介
类似地,我为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

问题定义
然而,coverage/spec中生成的HTML报告看起来不完整,几乎失败了。

没有一个测试的方法体被标记为覆盖,因此是红色的。然而,我100%确信它们是在规范内执行的。只有线路def method_name(args)class ClassName被标记为"绿色"。(以及带有attr_reader :instance_variable的线路)

我是不是错过了什么?


$: ruby --version  
ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux]
$: rspec --version  
2.8.0
$: rcov --version  
rcov 0.9.11 2010-02-28
$: rake --version  
rake, version 0.9.2

我也遇到了类似的问题。当我运行它们赢得RCov时,我100%确信规范没有被执行。但当我禁用RCov时,他们会这样做。

将RSpec降级到2.6.0版本帮助了我。

确保您需要足够早的rcov。

发件人http://rubydoc.info/github/relevance/rcov/master/Rcov/CodeCoverageAnalyzer:

请注意,在解析要分析的代码之前(即在加载或需要它之前),必须要求"rcov"。您可以使用-rrcov命令行选项调用ruby,也可以只调用:

我通过添加修复了这个问题

RSpec::Core::Runner.autorun

到我的规范文件的底部;即使使用rspec 2.9 也能工作

最新更新