2012-01-16 8 views
8

Prefazione
Ho appena iniziato a entrare in Ruby e cerco di imparare non solo la lingua ma anche alcune strategie di sviluppo. Come una specie di principiante mi sto concentrando su Test and Behavior Driven Development. (Sì, sto facendo sia a scopo di confronto)RCov per RSpec 2 non rileva correttamente la copertura? (not Rails!)

Con il mio progetto software piccolo sto usando

  • unittest (TDD)
  • cetriolo (BDD)
  • Rspec (TDD e BDD

In vari punti ho incontrato RCov come strumento per dirmi quanto del mio codice effettivo sto realmente testando.

ho creato il seguente RakeTask nel mio Rakefile per l'analisi covarage dei 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 

Questo funziona bene e sto ottenendo un bel report HTML colorato nel coverage/tests.

Problema Introduzione
Simile ho scritto il seguente RakeTasks per Rcov, da utilizzare per l'analisi di copertura dei mie specifiche:

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 

Definizione del problema
Tuttavia, il report HTML generato in coverage/spec sguardi in qualche modo incompleto e quasi fallito.

Nessuno dei corpi del metodo testato è contrassegnato come coperto e quindi rosso. Tuttavia, sono sicuro al 100% che vengano eseguiti all'interno delle specifiche. Solo le linee def method_name(args) e class ClassName sono contrassegnate da "verde". (come pure le linee con attr_reader :instance_variable)

Mi manca qualcosa?


$: 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 
+2

Se è possibile suggerire di passare a Ruby 1.9 e sostituire rcov con simplecov (funziona solo con 1.9). – Schmurfy

risposta

2

Assicurarsi che si sta richiedendo rcov abbastanza presto.

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

Si noti che è necessario richiedere 'rcov' prima che il codice che si desidera analizzare viene analizzato (vale a dire prima che venga caricata o richiesto). Puoi farlo invocando ruby ​​con l'opzione -rrcov della riga di comando o semplicemente:

3

Ho un problema simile. Sono sicuro al 100% che le specifiche non vengano eseguite quando le eseguo win RCov. Ma lo fanno quando disattivo RCov.

Il downgrade di RSpec alla versione 2.6.0 mi ha aiutato.

+1

Non so perché questo non è stato svitato ... Sembra che ci sia un problema con RCov e RSpec (> 2.6.0) dove la percentuale di copertura non ha più senso. (Stavo usando RSpec 2.9) –

0

Ho fissato questo con l'aggiunta di:

RSpec::Core::Runner.autorun

al fondo del mio file di specifica; ha funzionato anche con rspec 2.9

Problemi correlati