先日、Test::Unit を使って、Sinatra+Warden で作られたサンプルのテストを書きました。でも、Ruby でテストを書くなら、Test::Unit よりも Rspec の方が人気だし、自分好みです。せっかくなんで、Rspec でも同様のテストを書いてみます。
# coding: utf-8 require "./app" require "rspec" require "rack/test" describe "SinatraWardenSample" do include Rack::Test::Methods include Warden::Test::Helpers def app Sinatra::Application end context "ログインしていない" do it "/ にアクセスするとログインページを表示するべき" do get "/" last_response.body.should include("Login") end end context "ログインしている" do before do @user = { :name => "test", :password => "test" } login_as @user end after do logout end it "/ にアクセスするとログイン済みページを表示するべき" do get "/" last_response.body.should include("Hello Sinatra-Warden") end it "/logout にアクセスするとログアウトするべき" do get "/logout" last_request.env["warden"].user.should be_nil end end end
Rspec でも、Warden のヘルパーは使えました。Rspec だとログイン時のテストとログアウト時のテストを、キレイに分けて書けました。うん。今度から、Sinatra でアプリを作る時のテストは Rspec で書くことにします。