RSpec으로 컨트롤러를 테스트하는 것이 처음입니다. 내가 해당 모델의 방법 WidgetFeature.find_by_widget_id_group_by_status(widget_id)
을 테스트 한이 컨트롤러 사양으로 충분합니까?
def edit
@widget = Widget.find(params[:id])
if @widget.present?
@all_widgets = Widget.where(:id != @widget.id).select("id, title")
wfs @widget.id
else
redirect_to widgets_url
end
end
및
def wfs widget_id
@all_features,
@existing_features,
@draft_features,
@imported_features = WidgetFeature.find_by_widget_id_group_by_status(widget_id)
end
: 내 컨트롤러에서 나는 이러한 방법이있다.
이제는 edit
방법을 테스트하는 방법과 테스트 할 대상을 모릅니다. 나는 스텁, 가짜, 복식에 대해 모두 알고 있습니다. 나는 레일 테스트 처방과 RSpec 서을 따르고 있습니다. 그래서 용어와 기본에 익숙하지만 데이터를 모의하거나 공장을 만들 때 혼란 스럽습니다.
또한 편집 메서드가 실제로 wfs 메서드를 호출하는지 테스트 할 수 있습니까?
UPDATE :
다음은 (SimpleCov 테스트) 100 % 커버리지를 제공 내가 쓴 몇 가지 사양이있다. 위의 방법을 테스트하는 가장 좋은 방법입니까?
context " When #edit is called, it" do
it "assigns @all_widgets & other variables if widget for given widget_id is present" do
widget = Factory.create(:widget)
get :edit, :id => widget.id
assigns.each {|a| a.should be_kind_of(Array)}
response.should be_success
response.should render_template("edit")
end
it "redirects_to widgets_url if widget for given widget_id is not present" do
widget = Widget.stub!(:find).with(12)
get :edit, :id => 12
response.should redirect_to(widgets_url)
response.should be_redirect
end
end
댓글은 위의 사양
@leansan : 나는 당신이나 다른 사람에게 너무 많이 묻는 것을 알고 있습니다. 그러나 당신은 그것을하는 방법에 대한 짧은 스 니펫을 제공 할 수 있습니까? 그게 정말 도움이 될거야. – user738184
'Factory.create (: widget)'대신'mock_model (Widget)'이라고 말할 수 있습니다. – leenasn