HTTP Basic Authentication のテスト例となるパッチを送りました
先日 Ramaze さんのMLで HTTP Basic Authentication のテストってどう書くの?という質問が出ていたのですが、誰も答えを出さないからちょっくらやってみるか!と思いました。しかしこれがまたなんとも書きづらいわけでして、仕方ないから lib/ramaze/spec/helper/browser.rb の Browser#initialize を変更するパッチを作成しました。
PATCH: spec file for examples/simple_auth.rb
これを適用すると Browser#initialize を変更しちゃいますが、次のようなテスト(spec/examples/simple_auth.rb)が書けるようになります。
require 'spec/helper' require 'examples/simple_auth' describe "SimpleAuth" do behaves_like 'browser' ramaze(:adapter => :webrick) it 'should show start page' do Browser.new do http.basic_authentication "username", "password" get('/').should == "Secret Info" end Browser.new do http.basic_authentication "admin", "secret" get('/').should == "Secret Info" end end it 'should not show start page' do Browser.new do lambda{ get('/') }.should.raise end Browser.new do lambda do http.basic_authentication "hello", "world" lambda{ get('/') }.should.raise end end end end
つまり、Browser.new のブロック内の最初で http.basic_authentication username, password みたいに宣言してやれば良いわけです。これで続くリクエストは認証されますので、あとは御自由にテストしまくっちゃって下さい。実用的なアプリケーションのテストを考える場合には、まさか本番用のパスワードをテスト内にベタ書きするわけにもいかないでしょうから、もう少し工夫が必要だと思います。でも基本的にはこんな感じでやると良いと思います。
とは言え、これだけのために Browser#initialize を変更するのは影響が大き過ぎかもな、とも思います。しかしRamazeでテストをきっちり書いている人なんてまだ居ないと思うので、ひょっとしたパッチ通るかな?通るといいネ!
追記
無事パッチが取り込まれました、ありがとうございます。というかコミッタになったので、今後はこういう後方互換性を無視した危ないパッチを自分で適用しちゃうよ!なるべく変にいじらないように努力はするけど注意してね。