我想在我的控制器中测试这个方法。
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}
该方法期待参数,但是没有了。
我有两个问题。
这个方法应该在帮助器中而不是在控制器本身中(根据Rails惯例)吗?
如何在测试中提交获取请求并通过params
?
答案 0 :(得分:1)
作为一般规则,您应该测试班级的公共接口。对于控制器,这意味着您测试操作,而不是辅助方法。
您应该能够通过设置一个或多个单独的测试用例来调用相应的操作,然后使用消息期望来测试使用正确的参数调用辅助方法 - 或者测试辅助方法执行它应该做的事情(设置正确的实例变量/重定向/等)。