ぽっぺん日記@karashi.org
2007-09-18(Tue) [長年日記]
_ acts_as_authenticatedのControllerテスト用メソッド
acts_as_authenticatedのメソッド(current_userとか)を使っているControllerのメソッドをテストしたいなー、という時に みんなどうしてるんだろうと思ってググってみたけど、事例が見付からなかったので、
- id:moroさんのエントリーのskip_filter
- RSpec 1.0 Acts_As_Authenticated Specsに掲載されていたhttp://btucker.org/blog/rspec10acts_as_authenticatedspecs.attachment/309601/account_controller_spec.rb
をパクらせて参考にさせて頂いて、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。
もっと良い方法があるよ、という方は教えて頂ければ幸いです。
[ツッコミを入れる]
[]
本日のPingbacks(全0件)



まで頂ければ幸いです。
本の雑誌 302号 油蝉ガムテープ号 (302)
ポドロ島 (KAWADE MYSTERY)(L.P.ハートリー)
最高の銀行強盗のための47ヶ条 (創元推理文庫 M ク 14-1)(トロイ・クック)
異郷日記(西江 雅之)
赤めだか(立川 談春)
ハロウィーンに完璧なカボチャ (創元推理文庫 (Mメ2-3))(レスリー・メイヤー/高田 惠子)