2010-02-07 16 views
6

Ecco il mio controller:Rcov: Perché questo codice non è considerato coperto?

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 

... l'assistente che si basa su:

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 

... e il mio test funzionale (che sta usando Shoulda):

class MyControllerTest < ActionController::TestCase 
    context "MyController index" do 
    setup do 
     get :index 
    end 

    should_respond_with :success 
    end 
end 

EDIT Il mio rcov rake è esattamente uguale a quello elencato nella FAQ ufficiale: eigenclass.org

RCov (0.9.7.1) elenca ogni riga nel controller fino a "def index" come verde e ogni riga successiva (comprese tutte le "end") come rossa/non eseguita. So che quando il mio test viene effettivamente eseguito, esegue correttamente il codice.

Perché RCov fornisce risultati non intuitivi? C'è qualcosa che mi manca qui?

+0

Che aspetto ha l'attività di rcov Rake? È l'impostazione predefinita? – BaroqueBobcat

risposta

1

La mia ipotesi è che rcov consideri solo il codice eseguito in veri casi di test come "coperto" da un test. la tua chiamata a "ottenere indice" non è tecnicamente in un caso di prova, ma nel blocco di impostazione. shoulda ha problemi di ambito interessanti con l'installazione e forse rcov semplicemente non è abbastanza intelligente per rendersene conto.

Prova a inserire il codice in un blocco di test case (vedi sotto) - solo per vedere se questo cambia le cose. Nota: non penso che dovresti eseguire i tuoi test in questo modo - è solo per vedere se funziona.

context "MyController index" do 
    should "respond with success" do 
    get :index  
    assert_response :success 
    end 
end 
3

La mia ipotesi è che stai usando Ruby 1.9? Rcov non supporta Ruby 1.9 e produce risultati imprevedibili. Utilizzare invece SimpleCov.

Problemi correlati