2010-02-07 12 views
6

Oto mój kontroler:Rcov: Dlaczego ten kod nie jest uważany za objęty ochroną?

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 

... pomocnika, który jest oparty na:

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 

... a moje testy funkcjonalne (który używa shoulda):

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

    should_respond_with :success 
    end 
end 

EDYCJA Moja prowizja rcov jest dokładnie taka sama, jak wymieniona w oficjalnym FAQ: eigenclass.org

RCov (0.9.7.1) wymienia każdą linię w kontrolerze do "def index" jako zielony, a każdy wiersz po nim (łącznie z wszystkimi "końcami") jako czerwony/niewykonany. Wiem, że kiedy mój test faktycznie jest wykonywany, pomyślnie wykonuje kod.

Dlaczego RCov daje niezrozumiałe wyniki? Czy jest tu coś, czego mi brakuje?

+0

Jak wygląda twoje zadanie Rcov Rake? Czy to jest domyślne? – BaroqueBobcat

Odpowiedz

1

Domyślam się, że rcov uważa, że ​​kod uruchamiany w rzeczywistych testach jest "zakryty" przez test. twoje wezwanie do "uzyskania indeksu" nie jest technicznie w teście, ale w bloku konfiguracji. shoulda ma interesujące problemy z ustawieniami i być może rcov po prostu nie jest wystarczająco inteligentny, aby to zrozumieć.

Spróbuj umieścić kod w bloku przypadków testowych (patrz poniżej) - aby sprawdzić, czy to coś zmieni. Uwaga: Nie wydaje mi się, że powinieneś uruchamiać swoje testy w ten sposób - wystarczy sprawdzić, czy to działa.

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

Zgaduję, że używasz ruby ​​1.9? Rcov nie obsługuje ruby ​​1.9 i daje nieprzewidywalne wyniki. Zamiast tego użyj SimpleCov.

Powiązane problemy