2010-02-07 29 views
6

Aquí está mi controlador:Rcov: ¿Por qué este código no se considera cubierto?

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 

... el ayudante que está basado en:

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 

... y mi prueba de funcionamiento (que está utilizando Shoulda):

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

    should_respond_with :success 
    end 
end 

EDITAR Mi rastrillo de rcov es exactamente el mismo que el que figura en las preguntas frecuentes oficiales: eigenclass.org

RCov (0.9.7.1) enumera cada línea en el controlador hasta "índice def" como verde, y cada línea después de eso (incluyendo todos los "extremos") como rojo/no ejecutado. Sé que cuando se ejecuta realmente mi prueba, ejecuta el código correctamente.

¿Por qué RCov da resultados poco intuitivos? ¿Hay algo que me falta aquí?

+0

¿Cómo es tu tarea de rastrillo rcov? ¿Es el predeterminado? – BaroqueBobcat

Respuesta

1

Supongo que rcov solo considera que el código ejecutado en casos de prueba reales está "cubierto" por una prueba. su llamada a "obtener índice" no se encuentra técnicamente en un caso de prueba, sino en el bloque de configuración. debería tener un alcance interesante: problemas con la instalación y tal vez RCV simplemente no es lo suficientemente inteligente como para darse cuenta de eso.

Intenta poner el código en un bloque de caso de prueba (ver más abajo) - solo para ver si eso cambia las cosas. Nota: no creo que deba ejecutar sus pruebas de esta manera, solo para ver si funciona.

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

Supongo que usted está usando ruby ​​1.9? Rcov no es compatible con ruby ​​1.9 y produce resultados impredecibles. Use SimpleCov en su lugar.

Cuestiones relacionadas