7116


Ruby on Rails 3.2.13  
Rspec 2.14.0

こんにちは。

これまでまともにテストを書いていなかったのですが、さすがにまずいと思いRspecの勉強を始めました。

タイトルの通り、viewの中の埋め込みコードで結構な頻度で例外が発生するので、これを確認するためのテストを書きたいと思い、controllerのテストで

[code]

    it 'returns status 200' do
      get :show, {:id => user.id}
      expect(response).to be_success
    end
    
[/code]

としてみたところ、ブラウザ上では例外500が出ているのにも拘らず成功してしまいます。

こういった場合はどのようにテストを書くと良いのでしょうか？初歩的な質問で恐縮なのですが、Googleで調べてもなかなか欲しい情報が出てこず困っています。

どうかみなさんのお力をお貸しください。


CC BY-SA 3.0
2015-02-26T04:49:44.653
7113
2015-02-27T12:21:38.773
2015-02-27T12:21:38.773
76
7715
question
ruby-on-rails rspec
viewの埋め込みコードで発生する例外を確認する方法


ControllerのテストなのでデフォルトではViewをレンダリングしません。

もし、View（ERB）の中でエラーが発生しているとControllerのテストはパスして、ブラウザで開くとエラー、という可能性があります。

この予想が当たっているのであれば、解決方法は二つぐらいあるかなと思います。

### 解決策1

Controller specでviewをレンダリングし、responseの内容を検証する。

以下のページが参考になりそうです。

<https://www.relishapp.com/rspec/rspec-rails/v/2-1/docs/controller-
specs/render-views>

### 解決策2

Controller specではなくFeature specを書く。

Feature
specであればブラウザ上の操作をかなりリアルにシミュレートできるので、テストはパスしてブラウザではエラーになる、という可能性が低くなります。

Feature specについては僕がQiitaに書いたこの記事が参考になるかもしれません。

<http://qiita.com/jnchito/items/607f956263c38a5fec24>

どちらの解決策がオススメかと言えば、僕は後者のFeature specをオススメします。  
Controller specも全く書かないわけではないですが、僕の場合、書く頻度としてはModel specとFeature specの方が多いです。

なお、手前味噌になりますが、これからRSpecの勉強をするのであれば僕が翻訳した電子書籍 **「Everyday Rails -
RSpecによるRailsテスト入門」** を読んでもらうことをオススメします。

<https://leanpub.com/everydayrailsrspec-jp>

RSpec 3系とRSpec 2系の2種類のファイル（電子書籍）をダウンロードすることができるので、RSpec 2系を使っていても大丈夫です。

### それでも解決できない場合

ブラウザで発生しているエラーの詳しい内容を質問に追記してください。  
`log/development.log`に出力されているエラーのスタックトレースをコピーしてもらうのが一番よいと思います。


CC BY-SA 3.0
2015-02-26T05:27:14.297
7116
2015-02-27T02:10:53.140
2015-02-27T02:10:53.140
85
85
7113
answer