KonifarPod

RspecでControllerのViewの描画をテストする

   

Pocket

RSpecのControllerのテスト時、デフォルトではViewの描画は実行されません。そのため、Viewテンプレート内部でエラーが発生していた場合にはバグを取りこぼすことがあります。

RSpecでControllerのViewの描画部分までテストしたいときは、render_viewsをセットしましょう。僕がいつも行っているControllerのテストはこんな感じです。

describe 'GET show' do
  render_views # ← コレが大事

  let(:user) { Factory.create :user }

  describe :routes do
    subject {{ :get => "/users/#{user.id}" }}
    it { should route_to :controller => 'users', :action => 'show', :id => "#{user.id}" }
  end

  describe :response do
    before do
      get :show, :id => user.id, :format => format
    end

    context 'format html' do
      let(:format) { :html }

      describe :success do
        subject { response }
        it { should be_success }
      end

      describe :template do
        subject { response }
        it { should render_template('users/show') }
      end
    end
  end
end

 

テストの実行時間が少し長くなりますが、Viewの中のエラーは結構ハマりやすいのでRSpecのテストで拾えるならその方がいいと思います。(実際バグ出て面倒くさかった)全部書く必要はないと思いますが、Viewの描画のテストを行いたい時にはrender_viewsを使ってみてください。

Pocket

 - Develop ,