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

関連する問題