Rails3でdeviseを使用してコントローラーでログイン情報を取得する

RSpecで実行するコントローラーのテストでDeviseを使用時にログイン情報をどのようにセットすればいいのかなと思い調査したのでまとめます。(メモです)

Devise使用時のRSpecの設定については様々なサイトが説明されているので割愛しますが、今回はログインしているユーザー情報をもとにデータを取得するなど、コントローラーで認証された情報を取得したい場合にどうするかについてです。

そもそも、RSpecでは実行時コンテキストで認証が行われているかは以下の通り取得できます。

[ruby] it "ログインが実行されている" do subject.current_user.should_not be_nil end [/ruby]

今回はこのログインが実行されているときに設定されている current_user をテスト対象のコントローラーで取得したいわけです。

[ruby] def index @user_name = ...? end [/ruby]

いろいろと調査したところ、RSpecの実行コンテキストでコントローラーのスタブにログインユーザー情報を設定すればいいことがわかりました。簡単ですね。

[ruby]

ログインユーザー情報をコントローラーにセットする

controller.stub!(:current_user).and_return(@user) [/ruby]

※@userはログインユーザーの情報です。

久々にRubyやらRailsやらを書いているのですが、どうもいろいろなエコシステムのことが抜けているようで記憶を呼び覚ます必要がありそうです。。。