私は現在の要求に基づいて正規のURLを返すapplication_helper.rbで定義されたメソッドを持っています。コントローラの完全なURLをどうやって模擬したり指定したりできますか?application_helper_spec.rb内の特定のURLを使用してリクエストオブジェクトをテストするにはどうすればよいですか?
# spec/helpers/application_helper_spec.rb
describe "#canonical_url" do
it "should return a path to an asset that includes the asset_host" do
# Given: "http://www.foo.com:80/asdf.asdf?asdf=asdf"
helper.canonical_url().should eq("http://www.foo.com/asdf.asdf")
end
end
# app/helpers/application_helper.rb
def canonical_url
"#{request.protocol}#{request.host}#{(request.port == 80) ? "" : request.port_string}#{request.path}"
end
EDIT:
最終的に、私は(そのcanonical_urlをテストする)、異なるURLの束のための適切な文字列を返すポートを持ついくつかの、いくつかのW/O、クエリ文字列といくつか、といくつかのパスなどがあるかもしれませんが、それは残念ですが、それが最終目標です。明示的にスタブ/モック/初期URLの両方を明示的に設定して、マッチャーで明示的に期待値を設定したいと思います。 1回の呼び出しでこれを行うことができれば幸いです。つまり、controller.request.url = 'http://www.foo.com:80/asdf.asdf?asdf=asdf'
またはrequest = ActionController::TestRequest.new :url => 'http://www.foo.com:80/asdf.asdf?asdf=asdf'
ですが、これまでのところ私はそうすることを可能にする単一の「フック」が見つかりませんでした。それが私が探している解決策です。 特定のテストのリクエストURLを明示的に定義する方法を教えてください。
PS:私が実際に渡したURLは気にしません。アプリケーションのURLである必要はありません。canonical_urlメソッドは任意のURLで機能するはずです。しかし、私はテストの前に明示的に定義し、ActionController :: TestRequestがデフォルトに依存しないようにします。 –