RCov для RSpec 2 неправильно определяет покрытие?(не рельсы!) - PullRequest
8 голосов
/ 17 января 2012

Предисловие
Я только начал изучать Ruby и стараюсь изучать не только язык, но и некоторые стратегии развития.Будучи новичком, я концентрируюсь на тестировании и разработке, ориентированной на поведение.(да, я делаю оба в целях сравнения)

С моим небольшим программным проектом я использую

  • UnitTest (TDD)
  • Огурец (BDD)
  • Rspec (TDD и BDD)

В разных местах я встречал RCov как инструмент, позволяющий сказать мне, сколько из моего реального кода я действительно тестирую.

Я настроил следующую RakeTask в своем Rakefile для анализа ковариации UnitTests:

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

Это работает отлично, и я получаю красивый цветной отчет HTML в coverage/tests.

Введение проблемы
Аналогично я написал следующие RakeTasks для RCov, которые будут использоваться для анализа покрытия моих спецификаций:

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

Определение проблемы
Однако сгенерированный отчет 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

Ответы [ 3 ]

3 голосов
/ 11 апреля 2012

У меня похожая проблема. Я на 100% уверен, что спецификации не выполняются, когда я запускаю их и выигрываю RCov. Но они делают, когда я отключаю RCov.

Мне помогло понижение RSpec до версии 2.6.0.

2 голосов
/ 01 февраля 2012

Убедитесь, что вы запрашиваете rcov достаточно рано.

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

Обратите внимание, что перед анализом кода, который вы хотите проанализировать, вы должны указать rcov (т.е. прежде чем он будет загружен или требуется).Вы можете сделать это, вызвав ruby ​​с параметром командной строки -rrcov, или просто:

0 голосов
/ 05 апреля 2017

Я исправил это, добавив:

RSpec::Core::Runner.autorun

в конец моего спецификационного файла; работал даже с rspec 2.9

...