質問: Ruby on Rails 3.2.13 Rspec 2.14.0 こんにちは。 これまでまともにテストを書いていなかったのですが、さすがにまずいと思いRspecの勉強を始めました。 タイトルの通り、viewの中の埋め込みコードで結構な頻度で例外が発生するので、これを確認するためのテストを書きたいと思い、controllerのテストで ``` it 'returns status 200' do get :show, {:id => user.id} expect(response).to be_success end ``` としてみたところ、ブラウザ上では例外500が出ているのにも拘らず成功してしまいます。 こういった場合はどのようにテストを書くと良いのでしょうか?初歩的な質問で恐縮なのですが、Googleで調べてもなかなか欲しい情報が出てこず困っています。 どうかみなさんのお力をお貸しください。
回答: ControllerのテストなのでデフォルトではViewをレンダリングしません。 もし、View(ERB)の中でエラーが発生しているとControllerのテストはパスして、ブラウザで開くとエラー、という可能性があります。 この予想が当たっているのであれば、解決方法は二つぐらいあるかなと思います。 ### 解決策1 Controller specでviewをレンダリングし、responseの内容を検証する。 以下のページが参考になりそうです。 ### 解決策2 Controller specではなくFeature specを書く。 Feature specであればブラウザ上の操作をかなりリアルにシミュレートできるので、テストはパスしてブラウザではエラーになる、という可能性が低くなります。 Feature specについては僕がQiitaに書いたこの記事が参考になるかもしれません。 どちらの解決策がオススメかと言えば、僕は後者のFeature specをオススメします。 Controller specも全く書かないわけではないですが、僕の場合、書く頻度としてはModel specとFeature specの方が多いです。 なお、手前味噌になりますが、これからRSpecの勉強をするのであれば僕が翻訳した電子書籍 **「Everyday Rails - RSpecによるRailsテスト入門」** を読んでもらうことをオススメします。 RSpec 3系とRSpec 2系の2種類のファイル(電子書籍)をダウンロードすることができるので、RSpec 2系を使っていても大丈夫です。 ### それでも解決できない場合 ブラウザで発生しているエラーの詳しい内容を質問に追記してください。 `log/development.log`に出力されているエラーのスタックトレースをコピーしてもらうのが一番よいと思います。