トップ «前の日記(2013/05/01 (水) ) 最新 次の日記(2013/05/03 (金) 憲法記念日)» 編集 RSS feed

HsbtDiary


2013/05/02 (木) [長年日記]

[rack][ruby] rack middleware のテスト

最近は test-unit しか使ってないので test-unit と rack-test を使って rack middleware のテストを書く術をメモっておく。例えば response.body に foo という文字列を追加する middleware のテストならこんな感じ。

require 'test/unit'
require 'rack/test'
require 'rack-foo'

class TestApp
  def call(env)
    [
      200,
      { 'Content-Type' => 'text/html' },
      ['<html><head></head><body></body></html>']
    ]
  end
end

class FooTest < Test::Unit::TestCase
  include Rack::Test::Methods

  def app
    Rack::Builder.new {
      map "/" do
        use ::Rack::Foo
        run TestApp.new
      end
    }.to_app
  end

  def test_foo
    get '/'
    assert last_response.body.include? "foo"
  end
end

ポイントは Rack::Builder を使って middleware を適用した rack アプリを改めて作るというところらしい。middleware にはオプション引数を渡すというやり方もあるんだけど、その場合は Test::Unit::TestCase を継承したクラスをもう一つ作らないと app を使い回すとかはできないみたい。

最近、社内で共通で使えるライブラリをバンバン作る時に middleware も結構作るんで今後はこんな感じでテスト書いていく。