ユニットテストから link_to や url_for を使う方法
リンクや URL の HTML を生成してくれるヘルパメソッド link_to や url_for をユニットテストで使いたいことがあるかもしれない。これらは基本的にコントローラかビューのコンテキストで使うことが前提になっているから、ユニットテストではそのままでは使えない。次のような工夫が必要になる。
1. ユニットテストの先頭でヘルパメソッドの格納されているモジュールをインクルード
たとえば EntryTest というユニットテストで、link_to や url_for が使いたいとする。
url_for は ActionController::UrlWriter, link_to は ActionController::UrlWriter にあるから、
class EntryTest < Test::Unit::TestCase fixtures :entries include ActionController::UrlWriter include ActionView::Helpers::UrlHelper ... end
とする。
2. テストで default_url_options を指定
link_to と url_for はホスト名を必要とする。
ActionController::UrlWriter.default_url_options[:host] = "foobar"
のように指定する。default_url_options は省略されたパラメータを補うためにも使用できる。たとえば、entries_helper.rb で、次のようなメソッドがあるとしよう。
def link_to_new link_to "新規作成", :action => 'new' end
これは entry がらみのコントローラやビューから呼び出されるので、暗黙的に :controller => 'entries' である。しかしテストを行うときには、このようなコンテキスト情報は使用できない。そのときは、テスト側では、default_url_options を使って、
def test_link_to_new ActionController::UrlWriter.default_url_options[:host] = "foobar" ActionController::UrlWriter.default_url_options[:controller] = "entries" assert_equal "http://foobar/entries/new", link_to_new end
というふうに書くことができる。