Rspec で Controller テストの準備編

スポンサーリンク

Rails チュートリアルの説明通りに RequestSpec を中心に書くようにしていたのですが、ControllerSpec を書くべきケースに出くわしました。ということで、まずコントローラーのテストでユーザーをログインさせるために以下ドキュメントを参考にしました。

How To: Controllers tests with Rails 3 (and rspec)

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
rails-4.0.1
rspec-rails-2.14.0
capybara-2.2.0

spec_helper.rb の設定

まず、spec_helper.rb に以下を追加。

spec/spec_helper.rb

ControllerMacros モジュールを作成

login_admin, login_user のメソッドを作成します。

spec/support/controller_macros.rb

ControllerSpec(コントローラーテスト)を作成

spec/controllers/some_controller_spec.rb

ControllerMacros および ControllerSpec は、ドキュメント通りの上述の書き方だと上手く動きました。

上手く動かなかった書き方

最初テスト側でログイン状態の融通を効かせようとして、以下のように書いていたのですが動作しませんでした。

spec/support/controller_macros.rb

spec/controllers/some_controller_spec.rb

ControllerMacros から befor(:each) を省いて、テストのほうの before do でログインさせようとしていたのですが、以下のエラーが出て結局解決できなかった。以前もこれではまっていたのです…

なのでドキュメント通り最初の方法で書いて、ユーザーがログインしていない状態(current_user が nil)のテストを書く時は、describe 文をネストせずに分けて login_user を書かないようにします。

スポンサーリンク
私は Rails のテストフレームワークには RSpec を使っています。サーバーのテスト用に Serverspec もおすすめです。
 
スポンサーリンク
  • 2件のコメント
  • amukane

    役に立ちました!!
    ありがとうございます!!

    • taka

      いえいえ^^どういたしまして!
      こちらこそお役に立てて嬉しいです。

Leave Your Message!