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

Tor*_*örn 8 ruby rake rspec rcov

前言
我刚刚开始深入研究Ruby,并尝试不仅学习语言,还尝试一些开发策略.作为初学者,我专注于测试和行为驱动开发.(是的,我这两个都是为了比较目的)

我正在使用我的小软件项目

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

在各个地方,我遇到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标记为"绿色".(以及与之相符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
Run Code Online (Sandbox Code Playgroud)

gio*_*ele 2

确保您足够早地需要 rcov。

来自http://rubydoc.info/github/relevance/rcov/master/Rcov/CodeCoverageAnalyzer

请注意,在解析要分析的代码之前(即在加载或需要它之前),您必须要求“rcov”。您可以通过使用 -rrcov 命令行选项调用 ruby​​ 来做到这一点,或者只是: