1

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 

댓글은 위의 사양

답변

0

당신은 WidgetFeature을 조롱한다을 개선하는 방법에 오신 것을 환영합니다. 그렇게하면 DB에 도달하지 않아 테스트가 더 빨라집니다. 메서드가 wfs 메서드를 호출하는지 확인하려면 should_receive를 사용할 수 있습니다.

+0

@leansan : 나는 당신이나 다른 사람에게 너무 많이 묻는 것을 알고 있습니다. 그러나 당신은 그것을하는 방법에 대한 짧은 스 니펫을 제공 할 수 있습니까? 그게 정말 도움이 될거야. – user738184

+0

'Factory.create (: widget)'대신'mock_model (Widget)'이라고 말할 수 있습니다. – leenasn

관련 문제