RSpec + Railsで遊んでいたら
OpenIDと同じく前々からやってみたかったBDD. つーコトでRailsのテストをRSpecで試しに書いていたんですが, どうやらレスポンスのステータスコードの判定がRSpecっぽくできないっぽい.
describe HogeController, 'のfugaアクションは' do it '直接アクセスしても拒否られる' do get :fuga response.should be_status 403 # もしくは…… response.should be_forbidden # こんな感じ. コレがボクの思うRSpecっぽさ end end
んー, というかRSpecどうなってんの? って思って試しに:
def be_forbidden 403 end response.should be_forbidden
とやってみたら:
undefined method `matches?' for 403:Fixnum
って言われた. ならmatches?メソッドがあれば怒られないんですかね?
def be_forbidden o = {} # とりあえず空のHashで def o.matches?(v) # 与えられるのはshould(should_not)のレシーバーだと予想 v.status == '403 Forbidden' end o end response.should be_forbidden
通ったー! つかRSpecの仕組みを見ずにやったから, 通った方にびっくり.
適当にやってみたから上のはよくないだろうけど, こんな感じに拡張すればいいんかな?