2016-12-02 13 views
1

をレンダリングされた場合、私はこの種のコードがありますので、私は場合の私の見解を期待していたRSpecのチェックビューが

shared_examples "admin common actions" do |resource| 

     describe "logged admin" do 
     login_admin 

     describe 'GET #index' do 
      it 'responds with 200' do 
      get :index, :format => :html 
      expect(response).to have_http_status(200) 
      end 
     end 
     end 
    end 

は多少の誤差があると、テストが原因サーバがで500を返します。失敗するレンダリングされませんが私のケーステストは、ビューがレンダリングされないときに渡します。私はURLをチェックして、それは大丈夫です。だから私は間違っているの?

+0

render_viewsを 'describe'に追加しなければなりませんが、それはあなたの仕様を遅くします。もしあなたがビューをテストするつもりならば、それをしてください。こちらをご覧くださいhttps://www.relishapp.com/rspec/rspec-rails/v/2-1/docs/controller-specs/render-views。 – fanta

+0

500のエラーが予想される場合、なぜ200応答をテストしていますか?あなたはあなたがURLをチェックして何を意味するのですか?それは大丈夫ですか?この場合、okはサーバーが500エラーコードで応答したことを意味しますか?これをブラウザで入力して、どのようにテストしましたか?これに関連する他のコード、たとえばコントローラインデックスコード、ビュー、テストに関する関連情報などを確認すると便利です。 – David

+0

私は応答オブジェクト出力http://pastie.org/10975039を調べました。テストの範囲は、すべてのビューがエラーなしでレンダリングされているかどうかを確認することです。テストに失敗するように意図的にエラーを表示します。失敗していない、ブラウザでこのビューを試すと500ステータスが返されます – maki

答えて

0

コントローラの動作のユニットテストをレンダリングビューから切り離すため、rspecはコントローラテストを実行しているときに実際にはデフォルトでビューをレンダリングしません。理想的には、ビューのレンダリングはビューの仕様の関心事でなければなりません。

実際にコントローラでこれをテストしたい場合は、rspecにそのビューをレンダリングするように指示することができます。これにより、内部Webサーバー500のステータスコードは生成されません。例外がスローされるため、ステータス500のテストではなく、例外が発生しないことをテストしてビューを正しくレンダリングします。

shared_examples "admin common actions" do |resource| 
    describe "logged admin" do 
    login_admin 

    describe 'GET #index' do 
     it 'responds with 200' do 
     get :index, :format => :html 
     expect(response).to have_http_status(200) 
     end 

     context 'when rendering view' do 
     render_views 

     it 'renders the view' do 
      expect { get :index, :format => :html }.to_not raise_error 
     end 
     end 
    end 
    end 
end 
+0

私はまだ同じ結果を持っています。すべてのテストは成功します – maki

+0

hmmm奇妙な...上記のコードはテストされていて、正しく動作することがわかりました。他に何を提案するか分からない。 – David

+0

多分、ビューがレンダリングされたかどうかを確認する別の方法がありますか?例えばコントローラの仕様ではない – maki