トップ «前の日記(2007-09-17(Mon)) 最新 次の日記(2007-09-20(Thu))» 編集

ぽっぺん日記@karashi.org


2007-09-18(Tue) [長年日記]

曇り

_ acts_as_authenticatedのControllerテスト用メソッド

acts_as_authenticatedのメソッド(current_userとか)を使っているControllerのメソッドをテストしたいなー、という時に みんなどうしてるんだろうと思ってググってみたけど、事例が見付からなかったので、

パクらせて参考にさせて頂いて、RSpecのコードも理解しないままに、こんなコードを書いてみた。

module Spec::Rails::DSL
  module ControllerBehaviourHelpers
    module ExampleMethods
      def skip_filter(*filters)
        filters.each do |filter|
          controller.should_receive(filter).and_return(true)
        end
      end

      def login_as(user)
        session[:user] = user ? users(user).id : nil
      end

      def create_user(options = {})
        post :signup, :user => { :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)
      end

      def auth_token(token)
        CGI::Cookie.new('name' => 'auth_token', 'value' => token)
      end

      def cookie_for(user)
        auth_token users(user).remember_token
      end

      def should_be_logged_in
        session.should_not be_nil
        session[:user].should_not be_nil
      end

      def should_not_be_logged_in
        session.should_not be_nil
        session[:user].should be_nil
      end
    end
  end
end

これをspec_helper.rbに書いておいて、Controllerのテストでは、

it "user should see message" do
  login_as(:foo)
  should_be_logged_in
  response.should have_text("fooさん、ようこそ!")
end

みたいな感じで使う(上のテストはすごく適当)。 いらないfilterについては、skip_filterで回避すればOK。

もっと良い方法があるよ、という方は教えて頂ければ幸いです。

Tags: Rails rspec | | | | | | | Permalink
[]
本日のPingbacks(全0件)

トップ «前の日記(2007-09-17(Mon)) 最新 次の日記(2007-09-20(Thu))» 編集