Rspec で Controller テストの準備編

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

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

スポンサーリンク

— 環境 —
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 もおすすめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)
  • 2件のコメント
  • amukane

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

    • taka

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

Leave Your Message!