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の仕組みを見ずにやったから, 通った方にびっくり.

適当にやってみたから上のはよくないだろうけど, こんな感じに拡張すればいいんかな?