1

このメソッドをコントローラーでテストしたいと思います。

def fetch_match_displayed_count(params)
  match_count = 0
  params.each do |param|
    match_count += 1 if param[1]["result"] && param[1]["result"] != "result"
  end
  match_count
end

これは私がこれまでに書いたテストです。

describe "fetch_match_displayed_count" do
  it "should assign match_count with correct number of matches" do
    params = {"result_1"=>{"match_id"=>"975", "result"=>"not_match"}, "result_2"=>{"match_id"=>"976", "result"=>"match"}, "result_3"=>{"match_id"=>"977", "result"=>"not_sure"}, "result_4"=>{"match_id"=>"978", "result"=>"match"}, "result_5"=>{"match_id"=>"979", "result"=>"not_match"}, "workerId"=>"123", "hitId"=>"", "assignmentId"=>"", "controller"=>"mt_results", "action"=>"create"}
    controller.should_receive(:fetch_match_displayed_count).with(params)
    get :fetch_match_displayed_count, {params:params}
    assigns(:match_count).should == 5
  end
end

私の問題はこの行にあるようですget :fetch_match_displayed_count, {params:params} メソッドはパラメーターを期待していますが、nilになっています。

2 つの質問があります。

  1. このメソッドはコントローラー自体ではなく、ヘルパーに配置する必要がありますか (Rails の規則に従って)?

  2. paramsget リクエストを送信してテストに合格するにはどうすればよいですか?

4

1 に答える 1

1

原則として、クラスのパブリックインターフェイスをテストする必要があります。コントローラの場合、これはヘルパーメソッドではなく、アクションをテストすることを意味します。

適切なアクションを呼び出す1つ以上の個別のテストケースを設定し、メッセージ期待値を使用してヘルパーメソッドが正しい引数で呼び出されていることをテストするか、ヘルパーをテストすることで、この作業を行うことができるはずです。メソッドは、想定されていることを実行します(適切なインスタンス変数/リダイレクトなどを設定します)。

于 2013-02-01T02:41:39.737 に答える