6

これが私のコントローラーです:

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

...そして私の機能テスト(Shouldaを使用しています):

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

    should_respond_with :success
  end
end

EDIT私のrcovレーキは、公式のFAQにリストされているものとまったく同じです:eigenclass.org

RCov (0.9.7.1) は、コントローラー内の「def index」までのすべての行を緑としてリストし、それ以降のすべての行 (すべての「終了」を含む) を赤/未実行としてリストします。テストを実際に実行すると、コードが正常に実行されることがわかっています。

RCov が直観的ではない結果をもたらすのはなぜですか? 私がここに欠けているものはありますか?

4

2 に答える 2

3

Ruby 1.9を使用していると思いますか?Rcov は ruby​​ 1.9 をサポートしていないため、予期しない結果が生じます。代わりにSimpleCovを使用してください。

于 2011-04-14T12:27:17.747 に答える
1

私の推測では、rcov は、実際のテスト ケースで実行されたコードのみを、テストによって「カバーされた」と見なします。「インデックスを取得」への呼び出しは、技術的にはテストケースではなく、セットアップブロックにあります。shoulda にはセットアップに関する興味深いスコープの問題があり、おそらく rcov はそれを認識するほど賢くありません。

コードをテスト ケース ブロック (以下を参照) に入れてみてください。注: このようにテストを実行する必要はないと思います。これは、機能するかどうかを確認するためのものです。

context "MyController index" do
  should "respond with success" do
    get :index     
    assert_response :success
  end
end
于 2010-02-22T14:42:09.447 に答える