Rcov: Почему этот код не рассматривается как покрытый? - PullRequest
6 голосов
/ 08 февраля 2010

Вот мой контроллер:

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

... помощник, на котором он основан:

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

... и мой функциональный тест (который использует Следует):

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

    should_respond_with :success
  end
end

РЕДАКТИРОВАТЬ Мой rcov рейк точно такой же, как тот, который указан в официальных FAQ: eigenclass.org

RCov (0.9.7.1) перечисляет каждую строку в контроллере до «def index» зеленым, а каждую строку после этого (включая все «концы») красным / неисполненным. Я знаю, что когда мой тест действительно выполняется, он выполняет код успешно.

Почему RCov дает не интуитивные результаты? Я что-то упускаю здесь?

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

Полагаю, вы используете ruby ​​1.9? Rcov не поддерживает ruby ​​1.9 и дает непредсказуемые результаты. Вместо этого используйте SimpleCov .

1 голос
/ 22 февраля 2010

Я предполагаю, что rcov рассматривает выполнение кода только в реальных тестовых случаях как "покрытое" тестом. Ваш вызов «получить индекс» технически не в тестовом примере, а в блоке настройки. у musta есть интересные проблемы с настройкой и, возможно, rcov просто не достаточно умен, чтобы понять это.

Попробуйте поместить код в блок тестового примера (см. Ниже) - просто чтобы увидеть, изменит ли это что-то. Примечание: я не думаю, что вы должны запускать свои тесты вот так - просто чтобы посмотреть, работает ли он.

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